EC2컨테이너에 deploy.sh 파일을 만든다. - vim deploy.sh 아래 내용을 작성한다. REPOSITORY=/home/ubuntu PROJECT_NAME= 백엔드_디렉토리명 PROJECT_NAME2= 프론트엔드_디렉토리명 echo "> 백엔드 프로젝트 디렉토리로 이동" cd $REPOSITORY/$PROJECT_NAME/ echo "> Git Pull 백엔드 프로젝트" git pull echo "> 백엔드 프로젝트 Build 시작" ./gradlew build echo "> 기본 디렉토리로 이동" cd $REPOSITORY echo "> Build 파일 복사" cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/ echo "> 프론트엔드 ..
putty에서 EC2키를 로드하고 EC2 인스턴스 주소에 ssh로 접속한다. 이 포스팅에서는 자바 11버전을 설치한다. sudo apt-get install openjdk-11-jre 를 입력한다. 설치할 것이냐고 묻는 질문에 Y를 입력한다. sudo apt-get install openjdk-11-jdk 를 입력한다. 설치할 것이냐고 묻는 질문에 Y를 입력한다. java -version 을 입력해서 설치된 java 버전을 확인한다. JRE(Java Runtime Environment)와 JDK(Java Development Kit)가 모두 설치 완료 되었으면, 환경변수를 추가한다. which javac 명령을 통해 javac의 위치를 검색한다. 심볼릭링크를 위의 위치로 읽는다. sudo vi /etc/..
EC2 로그인 후 우측 상단의 지역이름을 누른다. 위와 같은 목록에서 아시아 태평양(서울) ap-northeast 를 누른다. 리전(Region)을 서울로 바꾸는 것으로, 서울리전을 사용하는 것이 다른 곳의 리전을 이용하는 것보다 속도가 빠르다. 서울로 변경 후, 검색창에서 EC2를 찾고 들어간다. 위와 같은 창이 뜨면 인스턴스 시작을 누른다. EC2 인스턴스에서 사용할 운영체제를 선택해야 한다. Window에 비해 리눅스를 사용하는 것이 약 절반정도 저렴하다.(아마도 Window를 사용하면 Window 라이센스료도 포함되기 때문에..?) Ubuntu Server 20.04 LTS 를 선택했다. EC2 인스턴스의 성능을 정해야한다. 프리티어로 사용하는 사람들은 t2.micro를 사용한다. 이후 추가 설정..
AWS에서 IAM기능은 거의 필수적으로 적용해야 하는 서비스이다. AWS의 서비스를 이용하는 것은 사용 요금이 부과된다. 혹시나 생길 수 있는 일(해킹)을 방지하기 위해 IAM 설정을 하는 것이 좋다. 스마트폰 OTP를 이용하여 MFA(멀티 팩터 인증)을 추가한다. MFA는 AWS에서 Id와 Password로 로그인 한 후, 스마트폰 OTP 인증까지 받아야 로그인 할 수 있는 서비스이다. 먼저 스마트폰에 OTP앱을 설치한다. 안드로이드폰의 경우 Google OTP앱을 설치하면 된다. AWS의 우측 상단의 내 정보를 클릭 후, 내 보안자격 증명을 클릭한다. 보여지는 화면에서 아래로 내리면 멀티 팩터 인증(MFA) 추가하는 부분이 보인다. 가장 보편적으로 사용하는 '가상 MFA 디바이스'를 이용한다. QR코..
스프링부트로 REST API를 만들던 중 다음과 같은 에러를 만났다. No serializer found for class ... and no properties discovered to create BeanSerializer @responseBody로 사용자 정의 클래스를 반환했는데 생긴 에러였다. @Getter가 있지 않아서 JSON으로 파싱이 불가해서 발생했다. (JSON으로 파싱하기 위해 사용하는 Jackson의 입장에서는 값을 읽을 수가 없기 때문이다) 해당 클래스에 @Getter를 적는 것으로 해결했다. 참고 : https://stackoverflow.com/questions/59578802/jackson-no-serializer-found-for-class-and-no-properties-d..
스프링 프로젝트를 하면서 REST API를 만드는 도중 다음과 같은 에러를 만났습니다. "org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation... 기존 방식에서는 http body에 데이터 하나밖에 넘겨줄 수 없었기에, 제네릭을 이용한 공통 리스폰스 객체를 만들고 싶었습니다. @PostMapping(value = "/login") public ResponseEntity login(@RequestBody AuthRequest authRequest) throws Exception { //생략 String token = "token"; return ResponseEntity.sta..
Spring개발을 하면서 @RestController인 Controller에서 @PostMapping으로 Post요청을 받을 때 문제가 생겼습니다. 분명히 select m from Member m where m.nickname = :nickname 쿼리에서 결과 로우가 한 개 나와야 하는데 0개로 나오는 문제였습니다. findAll()을 사용한 경우 결과 로우가 나오는 것을 봤을 때, 쿼리가 잘못 되었거나 파라미터 변수에 잘못된 값이 들어온 것이라는 두 가설을 세웠습니다. 아래는 결론입니다. 보통 VO객체를 사용하기 때문에 이런 식으로 만든 경우, 자동으로 MemberVO에 JSON형식이 매핑되었습니다. 하지만 Post요청에서 String형 하나만 보내는 경우, String으로 받는다면 '{"name":..
스프링을 이용한 프로젝트에서 테스트 코드를 작성하다가 다음과 같은 에러를 만났습니다. org.springframework.dao.InvalidDataAccessApiUsageException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.; nested exception is java.lang.IllegalStateException: For queries with named parameters you need to use provide ..