Spring 17

코딩페스티벌과 스프링시작

3기 코딩 페스티벌 여태 배웠던 프로그래밍 언어 기술을 검증하고 활용하는 차원에서 한화시스템 beyond sw 3기 코딩페스티벌을 열어봤다. 항상 쫓기는 커리큘럼탓에 짧은 시간밖에 진행되지 못했지만, 수강생들의 발전된 실력에 감탄하는 시간이었다. 실전 코딩테스트처럼 1시간 가량을 주고 개인적으로 문제를 풀어보고, 조별로 코드리뷰를 거친뒤, 발표 후 토론하는 과정이었다. 문제의 난이도는 프로그래머스 기준 lv2~lv3 수준의 문제였고, 카카오 블라인드 기출도 들어 있으니, 왠만한 기업 코테문제 중 중상급 난이도에 속하는 문제들이었다고 생각한다. 사실, 원래 잘했던 수강생들은 한번쯤 풀어봤을만한 문제일테고 이 문제풀이 시간이 크게 의미가 없었을지도 모르나, 프로그래밍 자체를 처음하거나, 기초가 부실해서 수강..

부트캠프 비전공자 이야기

4주차에 접어들면서 java가 시작되었다. 수강생들간의 편차가 가장 큰 과목이 java 일것 같아서 우려를 많이 했고, 실제 강의를해보니 편차가 심해도 너무 심하다. 누군가는 변수할당도 어려워하고 if문 사용도 버거워하지만, 다른 누군가는 프로그래머스 순위에 랭커로 들 정도로 편차가 심하다. 최대한 쉬운 강의를 지향하고자 했으나, 나도 모르게 강의에 속도와 탄력이 붙어버려서 비전공 수강생들이 많이 어려워 했고, 또 그렇게 피드백을 주는 것을 보면서 조금 더 천천히 가야 겠다는 다짐을 했다. 비전공 전공이라는 키워드가 SW개발자 분야를 시작하는 사람들의 가장 큰 화두인것 같다. 비전공이라 어렵다. 전공이라 할만하다. 그런데, 돌이켜 보면 각자의 전공을 대학4년동안 듣고 공부하는 시간이 얼마나 될까. 1학년..

카카오뱅크 해외송금 서비스 구현해 보기

간편송금업체에 개발자로 일하다보니, 타 업체들의 서비스는 어떻게 돼 있는지 분석할때가 있다. 카카오뱅크 해외송금 서비스가 어떻게 돼 있는지 궁금하여 UI를 틈틈히 분석 하여 DB설계 및 rest api를 구현해 보았다. 자세한 코드는 여기 github 코드 참고 일단, 카뱅 SWIFT 해외송금 화면은 아래와 같이 생겼고, swift 송금 중에 미국(USD)송금만을 분석해보았다. 참고로, 카뱅의 송금서비스가 서버단에서 어떻게 구현돼 있는지는 나는 전혀 알지 못한다. 단지 UI만을 분석하여 서버API를 설계해본 것이다. 기본적으로 해외송금은 고객으로부터 KRW기준으로 돈을 수령하여 환전 후 국제송금망(SWIFT)를 통해 해외로 송금을 보내는 것이다.(swift를 사용하지 않을때도 있긴하다) 국제송금망을 통해..

Could not find or load main class

Error: Could not find or load main class com.example.board.BoardApplication Caused by: java.lang.ClassNotFoundException: com.example.board.BoardApplication 스프링 기동중에 위와 같은 에러가 발생한다면 해볼 수 있는 조치사항에 대해 정리해보고자 한다. 참고로 본인은 mac에 intellij 사용자다. 구글링을 해봤다면 몇몇 방법들을 찾았을 것이다. 1)"Build" menu -> "Rebuild Project". 인텔리제이는 기존에 class가 존재한다면 가끔 rewrite를 못하기도 한다. 다시 빌드해보자. 2)인텔리제이를 닫고, rm -rf .idea *.iml 명령어를 실행하여 ..

jpa - N+1문제 원인과 fetch를 통한 해결

N+1 문제란 일단 2테이블에 대한 join에서 발생하는 문제이다. left join 1번으로 끝낼수 있는 쿼리조회가 N번이나 더 추가적으로 더 발생하는 상황을 말한다. 상황 글쓴이테이블(author)과 게시글테이블(post)이 존재한다. jpa의 findAll()을 통해 모든 글쓴이에 대한 모든 게시글 정보를 JSON형태로 조회하고자 한다. 문제발생 아래와 같이 글쓴이테이블(author)이 존재한다. 글쓴이는 여러개의 글을 쓸수가 있고, 글쓴이에 대한 글 목록들을 조회하기 위해서는 post(글목록)테이블과 1 : N의 관계인 oneToMany를 설정해줘야 한다. 즉, author테이블과 post테이블을 join 해야 한다는 말이다. @Data @Entity @Table(name="author") pub..

preflight시에 get만 cors에러나는 이유(post와의 차이 - origin null)

preflight -> xhr 로컬 브라우저에서 api서버로 리소스를 요청할때 아래와 같이 XHR (XML Http Request) 요청을 보내기 전에, preflight를 통해, 서버의 허용여부를 체크하게 된다. preflight시 get요청은 CORS에러 발생 서버와 도메인이 다르다면, CORS에러가 날 것이고 서버에서 CORS를 허용해준다면 요청이 정상적으로 처리 되어야 한다. 그런데, 서버에서 CORS에 대한 전체 허용을 해줘도 GET요청은 아래와 같이 에러가 발생한다. POST는 정상이다. orgin null이 문제 이유가 무엇일까? 일단 서버 프로그램을 하나씩 뜯어봐야 하지만, 결론을 말하자면 request헤더에 담겨 있는 origin이 null이라는 것이 문제이다. Spring 서버 프로그램..

spring 예외처리 정리(exception기본, 중첩된 예외, 멀티서버간 예외처리)

클라이언트에서 api서버에 데이터를 요청했을때 예외가 발생하면, 서버에서는 적절한 예외처리와 이와 관련된 http response를 클라이언트에 내려줘야 한다. 그래야지, 사용자가 어떤 요청을 잘못했는지에 대해 알수 있을것이고, 팝업을 띄우거나 관련된 에러화면을 보여줄 수 있을것이다. 그래서 오늘은 3가지 정도의 category로 예외처리에 대해 정리해보고자 한다. 먼저, 기본적인 예외처리, ControllerAdvice의 사용, ResponseEntity, JSON형태의 예외메시지 등 기본적인 1대의 API서버에서 발생할 수 있는 여러 상황에 대해서 알아보고자 한다. 두번째로는 예외 message중에 예외에 예외가 감싸져 wrapping되어 넘어오는 경우 또한 종종 있다. 예외에 예외가 wrapping..