전체 글 58

아마존 그만하고 네이버 합시다!

드디어 액트 나우의 백엔드 API서버를 배포 했습니다. 배포를 하면서 정말 가볍게 생각한 게 aws의 t2 nano로 배포 하려고 했습니다. 아직 오픈 초기인 만큼 트래픽이 크게 잡히지 않을거라 생각해서 한 결정입니다. 무료이기도 하고요 하지만 문제가 생기는데 인스턴스 상태 검사가 자꾸 실패하고 ec2에 접속도 못하는 현상이 발생했습니다. 부랴부랴 재부팅을 해서 다시 스프링을 돌렸는데 1시간 뒤면 또 같은 현상이 발생했습니다. 에러 로그도 확인해도 특별한 것이 없었습니다. 이런 상태로 실제 서비스를 한다는 건 정말 위험 하다고 생각했습니다. 구글링을 해보니 gradle빌드를 하면 메모리가 부족 할 수 있다는 걸 알게 됐습니다. 그래서 이제 아마존에 다른 사양의 컴퓨팅 서비스를 알아보다가 얼마전에 받은 네..

ActNow 2021.11.24

🍀 application.properties로 변수 숨기기

개발하는 동안 계속 고민하던 문제가 있었습니다. 바로 카카오 로그인 설정값과 jwt 시크릿키를 숨기는 것을 계속 해결하지 못하고 있었습니다. 너무나도 부끄럽지만 스프링에 익숙하지 않아서 생긴 문제였습니다. 라고 변명해 봅니다. 카카오 로그인 서비스 로직에서 중요한 정보를 application.properties에 정의 해두고 @Value 어노테이션으로 주입해 줍니다. 깃에 올릴 때 application.properties를 제외 해 줍니다. 기존에는 kakaoConfig라는 클래스에 static 변수를 만들어서 할당했습니다. 그래서 배포할 때 Ekfh KakaoConfig를 ec2환경 내에서 작성해야하나 싶었는데 다행히 해결했습니다. JWT 제일 큰 문제는 jwt 시크릿 키 입니다. jwt관련 로직은 제..

ActNow 2021.11.22

🎬 ActNow 2주차 스프린트 회고

1주차는 스프링 프로젝트에 적응하는 시간이었던 같습니다. Jwt를 활용해서 간단한 로그인 로직을 개발 했습니다. 추후에 왜 ActNow 서비스에 소셜 로그인과 Jwt를 적용했는지에 대해 포스팅 할 예정입니다. 구현기능 2주차 부터 본격적으로 기능을 개발하기 시작했습니다. 이번 스프린트 기간동안 구현한 기능은 다음과 같습니다. 1. 배우 프로필 등록 2. 배우 프로필 이미지 등록 (S3 연동) 3. 배우 프로필 이미지 여러장 등록 (S3 연동) 4. 배우 프로필 단일 조회 5. 배우 프로필 리스트 조회 (페이징 기능 추가) 맞닥뜨린 문제 1. JPA 문법 미숙 문제 아무래도 기존 장고 ORM에 익숙한 상태에서 바로 JPA로 넘어오니 JPA 문법에 익숙하지 않아 시간을 잡아 먹는 부분이 많았습니다. 장고 O..

ActNow 2021.11.13

[JAVA] 9093 단어 뒤집기 (문자열 다루기)

https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 이번 문제는 문자열과 스택 자료구조로 풀이할 수 있는 문제였습니다. 자바로 아직 문자열을 다루는게 익숙하지 않아서 여러가지 찾아보면서 풀이 했습니다. 정답 코드는 없습니다. 문제 풀면서 문자열 다루는데 사용한 메소드들을 정리해보겠습니다. 배열.isBlank() 파이썬에서는 배열의 문자열이 공백일 경우 " " 로 조건 조회를 할 수 있었는데 자바에서는 배열[인덱스].isBlank()로 처리해..

백준 2021.11.09

day2 error log

험난한 스프링 백엔드 개발 중 테스트 코드를 돌리는데 아래와 같은 에러가 발생 했다. java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test..

ActNow 2021.11.02

@GeneratedValue

@GeneratedValue(strategy=???) 자동 생성 대리 키 사용 방식 즉 @GeneratedValue 어노테이션의 strategy( 전략 ) 속성에 따라 기본 키 값이 생성됩니다. AUTO : DB 종류에 따라 JPA가 알맞은 것을 선택합니다. ( Oracle은 SEQUENCE , MySQL은 IDENTITY를 선택 ) @GeneratedValue(strategy=GenerationType.AUTO) IDENTITY : 기본 키 생성을 데이터베이스에 위임합니다. ( MySQL, PostgreSQL, SQL Server, DB2에서 사용 가능 ) @GeneratedValue(strategy=GenerationType.IDENTITY) SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키..

카테고리 없음 2021.11.01

🍀 Servlet 쿼리 파라미터 받기

이번 시간에는 servlet으로 쿼리 파라미터 요청값을 받는 법에 대해서 알아 보겠습니다. 본 포스팅은 김영한 선생님의 실전! 스프링mvc1편 강의를 보고 요약 정리한 내용입니다. @WebServlet(name = "requestParamServlet", urlPatterns = "/request-param") public class RequestparamServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } 우선 다음과 같이 클래스를 선언해 줍니다. @WebServle..

스프링 입문 2021.10.25

🍀 @JsonProperty

@JsonProperty에대해서 알아보겠습니다. Json포멧에서는 스네이크 케이스를 쓰면 자바에서는 카멜 케이스 방식을 사용합니다. 그렇다면 Dto에 정의된 자바 클래스에는 카멜 케이스로 멤버변수를 정의 해놓는데 이것을 Json으로 내려주면 고대로 카멜케이스로 나가기 마련입니다. 이러한 문제를 해결해주는게 @JsonProperty어노테이션 입니다. import com.fasterxml.jackson.annotation.JsonProperty; public class CarDto { private String name; @JsonProperty("car_number") private String carNumber; public String getName() { return name; } public voi..

스프링 입문 2021.10.23

🍀 스프링 PostController

이번 시간에는 PostController에 대해서 알아 보겠습니다. 저번시간에 패스 파라미터 쿼리 파라미터에 대해서 알아 보았다면 post메소드에 자주 사용되는 body에 값을 전달하는 방법에 대해서 알아보겠습니다. @RestController @RequestMapping("/api") public class PostApiController { @PostMapping("/post") public void post(@RequestBody Map requestData) { requestData.forEach((key, value) -> { System.out.println("key : " + key); System.out.println("value : " + value); }); } @PostMapping(..

스프링 입문 2021.10.23

🍀 스프링 Get Controller

이번 시간에는 스프링 Get Controller에 대해서 알아 보겠습니다. Get 요청이 왔을 때 Controller에서 데이터를 내려 주는 여러가지 방식과 각종 어노테이션을 소개합니다. 단순 문자열 반환 import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController // 해당 class는 REST API 처리하는 Controller @RequestMapping("/api") // Requestmapping UR..

스프링 입문 2021.10.23