Spring, Java 개발자 입니다
열심히 잘 사는게 목표JUnit 5, JAVA 테스트 코드 작성하기
실무 개발자 질문 예전에 취업준비생 이었을 때 마지막 최종 면접을 보면서 받은 질문이 있다. "JUnit 5 를 사용하셨던데 왜 JUnit 5 를 이용하셨고, 테스트 케이스를 작성하신 이유가 있을까요?" → "테스트를 할 때 JUnit 5 를 많이 사용해서 진행한다고 해서 사용했고 특별한 이유는 없었습니다." 여기 까지의 답변만 봐도 탈락이지만 좀 더 질문을 받았다. "그럼 왜 테스트 케이스를 만들어서 사용하는 걸 까요?, 굳이 작성 할 필요가 있을 까요?" 잘 기억이 나지 않지만 이리저리 짱구를 돌리다가 내 놓은 대답은 그냥 얼버무린 대답이었다. 나는 테스트 케이스를 왜 작성해야 하는지도 모른체, JUnit 5 을 이용해서 테스트 케이스를 작성했다. 테스트 케이스는 왜 작성 할 까? 이 질문에 대해서 ..

MSA 구조 : Micro service, Monolithic Architecture
MicroService Achitecture, MSA 누군가가 어떤 서비스를 개발하고 싶냐는 질문을 했었는데 그 때 간단하게 예전에 본 흥미로웠었던 B2C 서비스를 얘기했더니 MSA 에 대해서 공부를 해보라는 얘기를 들었다. 처음 들어본 용어라서 바로 무엇인지 물어봤더니 하나의 서비스를 독립적인 서비스로 분리하는 방식을 의미한다고 했다. 독립적으로 분리한다? WAS 와 WS 가 분리되어 있는 지금의 상태가 MSA 아닙니까 라는 질문에 WAS 를 더 작은 독립적인 단위로 쪼갠다는 얘기를 해줬다. 현재 내가 개발하고 있는 아키텍처 와는 좀 다른 형태로 구성을 한다는 것인데 궁금해졌다. Monolithic Architecture, 모놀리식 구조 애플리케이션 현재 우리 시스템을 간략하게 설명해보면 위와 같은 구..

QueryDSL 사용 이유와 방법 ②
[데이터베이스] - QueryDSL 사용 이유와 방법 ① QueryDSL 사용 이유와 방법 ① 실무에서 개발자를 하기위해 공부를 하던 시절에는 데이터베이스 라는 것에 대해 깊이 생각하지 않았다. 컴퓨터 프로그래밍 기술이 계속적으로 발전 하고 개발자가 좀 더 편하게 개발할 수 있 eno1993.tistory.com 일반적으로 QueryDSL을 왜 사용하는지 그리고 가장 간단한 조회에 대해서 살펴봤다. 그럼 좀 더 복잡한 조회 와 업데이트 그리고 삭제 방법에 대해서 살펴보도록 하자. 테이블 정의 @Entity @Table(name = "member") public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(na..

QueryDSL 사용 이유와 방법 ①
실무에서 개발자를 하기위해 공부를 하던 시절에는 데이터베이스 라는 것에 대해 깊이 생각하지 않았다. 컴퓨터 프로그래밍 기술이 계속적으로 발전 하고 개발자가 좀 더 편하게 개발할 수 있도록 도와주는 프레임워크나 라이브러리를 통해서 많은 부분들에 대해서도 생각할 필요가 없어졌고 마찬가지로 JAVA Spring 을 사용하면서 비지니스 로직에만 몰두하는 개발자가 되어 JPA를 어떻게 잘 사용하면 될 까, 혹은 어떤 라이브러리를 써야지 SQL에 의존적이지 않은 개발을 할 수 있을까만 생각을 했던것 같다. 뭔가 점점 바보가 되어가는 느낌이다. 운 좋게 면접관으로 여러번 참여할 수 있는 기회를 얻게 되서 다양한 면접자들의 DB 접근 기술을 확인 할 수 있는데 많은 분들이 QueryDSL을 사용해서 쿼리문을 작성하는 ..

HTTP Request와 Response 그리고 Filter 처리 과정
HttpServletRequest 와 HttpServletResponse 를 통해서 여러가지 작업을 처리할 수 있다는 것을 알고는 있지만 실제로 간단한 필터처리를 제외하고는 사용해 본적이 없었다. 그러던 중 모든 사용자의 request와 response 를 분석해 기록을 해달라는 요구사항이 들어왔고 이 기회를 통해서 내가 헷갈렸던 부분과 필터의 처리 과정에 대해서 다시한 번 정리 해보려고 한다. (Filter 처리 후 Spring Context 영역 내에서 일어나는 것은 다루지 않을 예정) 우선 Client 의 Request 가 들어오면 어떤 방식으로 Response 를 만들어 전달하는지에 대한 부분부터 살펴봐야 한다. Client 가 Server 로 Request 를 보내면 Spring 영역으로 들어가..
JAVA batch insert, update JdbcTemplate
query dsl 을 사용해서 insert 와 update 기능을 구현했는데 한 꺼번에 수많은 데이터를 집어넣어야 하는 경우가 발생해서 성능적인 부분에서 이슈가 발생했다. spring jpa 를 사용해서 batch insert로 데이터를 집어 넣을 수 있지만, @GeneratedValue(strategy = GenerationType.IDENTITY) 를 사용하고 있을 경우 db에 insert 수행이후 id 값을 알 수 있기 때문에 쓰기 지연 기능이 불가, batch insert 사용이 불가능 하다. 따라서 jdbc template을 이용해서 직접 쿼리를 날려줘서 batch insert를 수행해야 한다. 굳이 jpa 를 이용하여 수행할 수 있는 방법이 있지만 key 매핑 전략을 변경해야 하고 어떤 db ..

JAVA Stream 병렬 처리와 성능 분석
항상 for 문을 사용해서 개발을 했었는데 실무에서 사용된 코드를 보니 많은 곳에서 stream이 사용된다는 것을 확인했다. 그래서 stream 에 대한 정리가 필요 할 것 같아 stream 기능에 대해 공부 해보기로 했다. stream의 핵심은 사용방법이 아니고 가독성과 효율성 사이 트레이드 오프 관계의 이해이다. stream 기능은 Java 8 부터 지원하는 기능이다. 2014년에 Java 8 이 처음 나왔는데 아직까지 많이 사용되는 버전중에 하나인것을 생각해보면 상당히 잘 만들어진 자바 버전인것 같다. 컬렉션 요소 하나하나를 람다식으로 처리할 수 있도록 하는 stream 기능은 개발자가 직접 반복자를 정의해서 처리하지 않고 내부 반복자를 통해서 처리 할 수 있도록 하여 코드의 가독성을 높여주고 있다..

SQL 'LIKE' VS '=' 의 차이, 알고리즘
최근 테이블 업데이트 과정에서 시간단축을 위해서 벌크 쿼리를 사용한 적이 있다. 그 과정에서 String 으로 구성된 컬럼 하나에 like 를 조건으로 사용해 시간결과를 확인해보았고 도저히 받아들일 수 없는 결과를 맞이했다. 벌크 연산 쿼리가 Querydsl 보다 훨씬 더 느린 결과가 나온것이다. 왜지?!, 바로 사수 개발자 분께 물어보니 쿼리를 보고 바로 문제를 짚어주셨다. "LIKE 연산을 수행하네요, = 로 변경하세요" 1차 의문 LIKE 와 = 의 연산 알고리즘은 다른 방식인가? LIKE 문은 %와 같이 사용하지 않는다면 결과적으로 동일한 문자열을 서칭하게 되는데 이것은 = 문의 사용과 동일한 결과 값을 보내준다. 실제로 둘의 알고리즘이 동작하는 차이를 알아보자 했고 하루동안 계속 찾아본 결과 D..