Spring, Java 개발자 입니다

열심히 잘 사는게 목표
JAVA/JUnit

JUnit 5, JAVA 테스트 코드 작성하기

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

개발 공부/MSA

MSA 구조 : Micro service, Monolithic Architecture

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

데이터베이스/Querydsl

QueryDSL 사용 이유와 방법 ②

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

데이터베이스/Querydsl

QueryDSL 사용 이유와 방법 ①

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

Spring/Filter

HTTP Request와 Response 그리고 Filter 처리 과정

HttpServletRequest 와 HttpServletResponse 를 통해서 여러가지 작업을 처리할 수 있다는 것을 알고는 있지만 실제로 간단한 필터처리를 제외하고는 사용해 본적이 없었다. 그러던 중 모든 사용자의 request와 response 를 분석해 기록을 해달라는 요구사항이 들어왔고 이 기회를 통해서 내가 헷갈렸던 부분과 필터의 처리 과정에 대해서 다시한 번 정리 해보려고 한다. (Filter 처리 후 Spring Context 영역 내에서 일어나는 것은 다루지 않을 예정) 우선 Client 의 Request 가 들어오면 어떤 방식으로 Response 를 만들어 전달하는지에 대한 부분부터 살펴봐야 한다. Client 가 Server 로 Request 를 보내면 Spring 영역으로 들어가..

데이터베이스/Sql

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

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..

수달하나
Develop Lab