https://megamaker.tistory.com/410 [Spring Boot] 같은 Service 타입 Bean 여러 개 등록해서 요청마다 다른 Service 호출하기 및 예외 처리이번 프로젝트에서 코딩테스트 문제 풀이 서비스를 개발하고 있다. 런타임에 코드를 컴파일 후 실행을 하는 로직을 만들어야 하는데 문제는 요청에 포함된 개발 언어에 맞는 서비스를 동적으로megamaker.tistory.comㄴ 이전 게시글 이전에 사용자 코드 실행 컨트롤러를 enum과 스트림을 이용해서 작성한 적이 있었다.그런데 아무리봐도 뭔가 아니었다... 너무 불필요하게 복잡한 느낌이었다.코딩테스트 문제를 풀 때 너무 돌아가서 복잡하게 푸는 것 마냥 느껴지는 것을 참을 수 없어서 리팩토링해보기로 했다. 기존 코드 @..
이번 프로젝트에서 코딩테스트 문제 풀이 서비스를 개발하고 있다. 런타임에 코드를 컴파일 후 실행을 하는 로직을 만들어야 하는데 문제는 요청에 포함된 개발 언어에 맞는 서비스를 동적으로 호출해야 한다는 점이었다. 사실 서비스마다 각각 주입받아서 실행시켜도 되지만 이렇게 하면 코드가 너무 지저분해지고 다른 언어 서버스가 늘어나면 그게 따른 조건문을 추가로 작성해주어야 한다는 문제가 또 생겼다. 그래서 고민한 결과 다음과 같이 구현해 보기로 했다. List로 빈 주입받기일단 먼저 각 서비스에서 공통적으로 코드를 실행한다는 부분이 중복되기 때문에 인터페이스로 만들어 각 서비스를 구현하기로 했다. public interface CodeRunService { void run(RequestUserAnswer..
지난 프로젝트에서는 네이버, 카카오, 구글 로그인을 JWT를 이용해서 할 수 있었는데 이번 프로젝트에서는 코딩 테스트 문제라는 비즈니스 로직에 집중하기 위해 세션 방식으로 구현해 보고, 세션 클러스터링과 이전의 로직을 리팩토링해서 구현해 보기로 했다. 이전 코드와 비교하기OAuth2UserService @Slf4j@Service@RequiredArgsConstructorpublic class CustomOAuth2UserService extends DefaultOAuth2UserService { private final Environment environment; private final UserClient userClient; @Override public OAuth2User l..
모르고 이전 contributions를 스크린샷으로 남기지 못했는데 그동안 프로젝트를 진행하면서 푸시한 커밋들이 내 profile에서 조회되지 않는 문제가 있었다.나는 contributions를 보면서 매일 어느정도 개발했나 파악하고 있었는데 이런 현상이 발생하니 여간 불편한게 아니었다... 해결 방법 찾기 먼저 일단 검색을 해보았다.거의 대부분 언급하는게 local Git의 username과 email이 Github내의 정보와 일치하는지 확인하라는 것이었다. 그런데 나는 일치하는 것을 몇 번이나 확인해보았고, Git 자체를 삭제했다 다시 설치해보기도 했는데 문제는 해결되지 않았다.그래서 다른 저장소로 테스트삼아 푸시를 해보았는데 그건 또 제대로 기록이 됐다. 그래서 더 찾아본 결과 fork가 문제였다..
오랜만에 프로젝트를 진행하다보니 복습도 되고 참 좋은 것 같다. 무엇보다 그동안 공부한 내용이 있기에 이전의 로직을 더 발전시켜 작성할 수 있게 되었다.그런데 프로젝트를 진행하다가 문제를 하나 맞닥뜨리게 되었다. 비즈니스적으로는 동작을 잘 하지만 최적화의 문제였다. 그것은 바로 JPA를 사용하면서 엔티티 조회를 한 번만 했지만 쿼리가 따로 나가는 문제이다.이 문제를 해결하는 과정을 기록해 두기로 했다. 문제의 원인 알아보고 해결하기 이것이 현재 상황을 나타낸 ERD이다.코딩테스트 문제를 불러오면 테스트 케이스와 그림을 같이 불러올 수 있도록 구성했다.위에서 쿼리가 세 번 나간 이유도 엔티티가 세 개여서 그런 것 같다. @Getter@NoArgsConstructor(access = AccessLevel..
어플리케이션을 배포할 때 어플리케이션의 포트를 직접 외부에 노출시키면 보안에 좋지 않다. 그래서 HTTP는 80, HTTPS는 443을 기본으로 사용하는데 이 포트로 온 요청을 어플리케이션의 포트로 전달하는 포트포워딩을 사용해서 이 문제를 해결할 수 있다. NGINX를 이용하면 포트포워딩뿐만 아니라 특정 경로에 맞게 요청을 이동시키는 로드밸런싱이나 HTTP 요청을 HTTPS로 리다이렉트 시키는 등의 처리를 할 수 있다. 하지만 나는 일단 포트포워딩만 필요한 것이니 해당 설정만 진행했다. NGINX 설치 sudo apt updatesudo apt install nginx 일단 NGINX를 설치해준다. 모든 설치 과정은 Ubuntu 20.04 기준으로 진행한다. 설치 후에 /etc/nginx/ 경로로 들..