AWS에 가입을 마친 후 콘솔 홈에 들어 가면 제일 중요한 것이 리전을 확인하는 것이다.

이렇게 오른쪽 상단에 보면 "서울" 이라고 표기되어 있는지 되어 있지 않다면 꼭 서울로 바꾸어 주어야 한다!

안그러면 과금을 모든 리전에서 물 수 있음!!!!!

 

상단 검색창에 EC2를 검색하면 클라우드의 가상 서버가 뜬다.

이 곳으로 클릭 해서 들어가면 인스턴스를 시작할 수 있다.

인스턴스 시작을 클릭하여 들어가면,

 

이름을 설정해주고 나는 우분투를 사용할 것이기때문에 ubuntu를 선택해 준다.

그리고 인스턴스는 저렴하게 또는 무료로 사용가능하게 해주는 프리티어를 사용 할 것이다.

aws ec2는 사용한 만큼의 비용을 지불하는 것이기 때문에 t2.micro는 시간당 0.0144달러를 내는 것으로 되어있다.

* 그래도 사용하지 않을 때는 꼭 꺼둬야 과금을 피할 수 있다!

 

그 다음은 키페어다.

ssh 로그인을 하려면 키페어가 필수인데, 우리는 현재 만들어 놓은 것이 없으니 새 키 페어를 생성해준다.

키 페어 생성을 누르면 파일이 다운로드 된다. (다운로드된 파일로 나중에 키페어를 사용하니 꼭 지우지말고 저장해둬라!)

네트워크 설정은 고대로 놔두고 진행할 것이다.

나중에 웹서비스를 한다면 아래에 HTTP/HTTPS 트래픽을 허용하는 것을 선택해주면된다.

볼륨은 기본 8기가로 놔두면됨!

인스턴스 시작을 누르면 인스턴스가 생성된다.

 

그러면 인스턴스 상태가 실행 중/ 상태검사가 초기화로 되어 있는데

한 1~2분 정도 지나면

요렇게 모든 검사가 통과된 것을 볼 수 있따!

 

 

인스턴스를 연결하는 방법은 몇가지가 있지만

우선 제일 기본적으로 할 수 있는 방법은

오른쪽 상단에 있는 연결버튼을 누르는 것이다.

 

이 창에서 오른쪽 하단 연결을 누르면

짜잔 ls -al 을 치면 모든 작업을 볼 수 있는 것을 확인할 수 있다~!

'개발일기 > AWS' 카테고리의 다른 글

aws 로드밸런서_healthy 하게 만들기  (1) 2023.06.15
aws ubuntu_git clone으로 배포하기  (0) 2023.06.14
AWS 로드밸런싱 (http/https) 적용  (1) 2023.06.13
ubuntu 접속 오류  (0) 2023.06.09
대상그룹 unused  (1) 2023.06.01

예를 들어 쿼리 조회시 파라미터값이 log, int, String 으로 다양하다면

 Map으로 묶어서 조회하면 에러를 방지할 수 있다!

 

@Override
public MerchantVolume findByMerchantVolume(long aaa, int bbb, String ccc) {
Map<String, String> map = Map.of("aaa", String.valueOf(aaa), "bbb", String.valueOf(bbb), "ccc", string.valueOf(ccc)0;
return merchantDao.findByMerchantVolume(map);
}

 

이런식으로 DataBaseAccess에서 오버라이드를 시킨다음

 

mapper에서

<select id = "findByMerchantVolume" parameterType = "java.util.Map"
resultType = "MerchantVolume 위치주소">
~~~~
</select>

 

이렇게 사용하면 된다

업무를 하면서 부트캠프에서 한 것들을 돌이켜보며 왜이렇게 했지... 라는 생각을 굉장히 많이 했다 ㅋㅋㅋ

 

3,4년차 선배들에게 배운것들이 많다.

특히 그냥 데이터 존재를 했을대 NPE(NullPointException)이 나는 것을 그냥 방치해두면 안되기 때문에

대부분 Optional 을 쓴다고 했다.

그래서 요즘 Optional을 매우 많이 쓰는중 ㅎㅎ

 

예를 들면

우리는 헥사고날 아키텍쳐로 리부트를 진행했기 때문에 service를 바로 타지 않고 port를 한번 거치는데

OutPort에서 

Optional<TransactData> findByTransactId(String transactId);

를 한 다음,

adaptor -> out -> db -> TransactDao 에서

TransactData findByTransactId(String transactId);

그리고 DataBaseAccess에서

@Override

public Optional<TransactData> findByTransactId(String transactId) {
return Optional.ofNullable(transactDao.findByTransactId(transactId)));

}

 

그리고 마지막으로 service 단에서

OutPort.finByTransactid(transactId).orElseThrow(() -> return new Exception("~~~");

 

이렇게 사용해준다!

 

*참고로 예외도 던지면서 다른 작업도 하고싶다면?

orElseThrow(() -> { slackSendHook("~~");
return new Exception("~~~");
});

 

이렇게하면 동시에 작업이 가능하다~

업무를 하던 중

분명 domain과 db 컬럼도 다 맞추고 mapper 안의 쿼리에도 문제가 없는데

자꾸 에러가 나는 것이다.

index 30 out of bounds for length 30

에러 내용을 봤을 땐 인덱스가 자꾸 길이에 안맞다고 하는데 

아무리 봐도 문제가 없었따...

 

열심히 구글링하고 사수에게 물어보니

JPA에서는 기본 생성자만 갖춰주어도 되지만 Mybatis에서는

@Getter

@Setter 가 있어도 @Builder를 사용하는 경우에는

@NoArgsConstructor

@AllArgsConstructor 를 넣어주어야 Mybatis에서 업데이트를 (원하는 컬럼만)선택적으로 하더라도 오류가 나지않는 것...

 

만약 두 어노테이션을 쓰지않을거라면 업데이트 할때 모든 컬럼을 해주어야한다!!!.

	// 채팅 메시지 생성해서 AWS SQS로 전송
	@CrossOrigin // 귓속말 할때 사용
	@PostMapping("")
	public Mono<Chat> sendMessage(@RequestBody Chat chat) {
		sqsChatSender.sendMessage(chat);
		return chatRepository.save(chat);
	}

sse 채팅을 보내는 코드에서 위와 같이 작성하면 id가 랜덤으로 잘 생성되어 잘 받아와지는데..

 

	// 채팅 메시지 생성해서 AWS SQS로 전송
	@CrossOrigin // 귓속말 할때 사용
	@PostMapping("/chat")
	public ResponseEntity<ResponseDto> sendMessage(@RequestBody ChatRequestDto chatRequestDto) {
		// chat.setCreatedAt(LocalDateTime.now());
		Chat chat = new Chat(chatRequestDto);
		sqsChatSender.sendMessage(chat);
		chatRepository.save(chat);

		return new ResponseEntity<>(new ResponseDto(200, "전송됨",chat), HttpStatus.OK);
	}

ResponseEntity를 활용하면 id가 null값이 나온다.......

대체 왜지....?????????

'개발일기' 카테고리의 다른 글

NPE를 막기 위한 방법?  (0) 2024.04.17
Mybatis에서 index 오류?  (0) 2024.04.05
sse 랜덤채팅-docker, kafka 사용하기(2)  (0) 2023.07.22
sse 랜덤채팅-docker,kafka 사용하기(1)  (0) 2023.07.21

docker desktop에서 kafka와 zookeeper의 로그를 보면 이상이 없는데 

자꾸 이렇게 오류가 뜬다........

이거때문에 이틀동안 오류를 해결 못하고 있다ㅜㅜㅜㅜ

 

일단 kafka 파일에서 포트 설정을 해주어야 한다고 하는데 

처음에는 아무것도 모르고 이상한 kafka 파일을 다운받아서 그안에서 자꾸 해결을 하려고 했따..........

터미널창에서 들어가서 했어야하는데ㅠㅠㅠㅠ 멍청이다..

 

 

제일 먼저 도커 컨테이너를 실행시킨 상태에서

powershell을 열어서 카프카 컨테이너로 들어간다

docker exec -it kafka /bin/bash

config 폴더로 가서

cd /opt/kafka/config​

server파일을 수정해주려고 하는데 vi가 안먹히는 것 ㅠㅠㅠ

vi server.properties

찾아보니 nano로 하면 된다고 해서 했는데 이것도 안먹힘.............

nano server.properties

그래서 nano를 깔아주었따

apt-get update​

apt-get install nano

그러고 나서 수정하러 들어가니까 너무 잘댐!!!!!!!!!!!!!!

맨밑에 부분 주석을 저렇게 제거해주어야 한다고 한다!

 

그리고 kafka가 잘 실행되고 있는지 확인해보자.

 

topic을 먼저 생성해준다.

kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic chat-topic

그리고 1번 터미널에서 접속을 해서 메세지를 보내주고

kafka-console-producer.sh --topic chat-topic --broker-list localhost:9092

2번 터미널에서 메세지를 받을 거다

kafka-console-consumer.sh --topic chat-topic --bootstrap-server localhost:9092 --from-beginning

kafka는 아주 잘 작동하는걸루....

 

 

근데 왜 안되는거야...........하아...................

'개발일기 > Docker' 카테고리의 다른 글

docker desktop(window 11)  (0) 2023.07.20

+ Recent posts