Develop
JPA - 엔티티 수정(merge, dirty check)에 대한 내용 정리
JPA(Java Persistence API -> Jakarta Persistence API)를 사용할 때 엔티티를 수정해야 할 때 아래처럼 2가지 방법이 있다. 병합(merge) 변경 감지(Drity checking) 아주 간단하게 정리하자면 "병합"은 수동, "변경 감지"는 자동이라고도 볼 수 있다. 사실 두 방법에 대한 중요한 차이점은 직접 명시하니 자동으로 해주니가 아닌 "어떻게 동작하는가?"라고 볼 수 있다. 일단 병합을 사용한 엔티티 수정에 대해 정리해보자 병합(merge) 병합의 경우 수정된 엔티티를 직접 merge() 메서드를 통해 반영시킨다. 이 때 엔티티의 모든 속성을 갱신하게 되기 때문에 비어있는 속성이 있는 경우 Null이 DB에 반영 될 수 있다. 병합을 사용해야 하는 경우는 준영..
Mac] kill processor script
Mac에서 IntelliJ를 사용하며 Spring 프로젝트를 실행시키는 경우에 종종 프로세스가 정상적으로 종료가 안되어 8080 포트가 계속 사용되면서 재실행이 안되는 경우가 발생한다. 그렇다고 이러한 경우가 매우 자주 발생하는 것은 아니다 보니 8080 포트를 사용 중인 프로세스를 찾아서 죽이는 방법을 까먹게 되더라.. 그때마다 다시 찾아서 사용하기가 불편해서 그냥 스크립트로 만들어서 쓰기로.. 그렇게 만든 스크립트를 만든 김에 공유하고자 블로그에 남겨둡니다. 쉘 스크립트 코드 더보기 #!/bin/sh PORT=$1 if [ -z "$PORT" ]; then PORT=8080 fi echo "Port : $PORT" if [[ "$PORT" = *[a-zA-Z]* ]]; then echo "Port i..
트랜잭션 스크립트 패턴과 도메인 모델 패턴
간단하게 보면 비즈니스 로직 구현을 어디에서 하는가에 따라 트랜잭션 스크립트 패턴과 도메인 모델 패턴으로 나뉘게 된다. 트랜잭션 스크립트 패턴 트랜잭션의 동작처럼 특정 기능의 플로우를 스크립트와 같이 하나의 메서드에 구현하는 방법 해당 패턴은 엔티티에는 비즈니스 로직이 거의 없으며, 서비스 계층에 비즈니스 로직이 집중되어 있다. 장점으로는 일반적으로 익숙한 방법이기에 구현이 쉽다는 점이 있으며, 각각의 기능에 대해 모듈화를 잘 한다면 효율도 좋게 나온다. 즉, 모듈화를 잘 한다면 쉽게 개발이 가능하며 효율도 좋다는 의미 하지만 로직이 복잡해질수록 코드가 난잡해지며, 도메인 분석/설계에 대한 개념이 약하기 때문에 코드의 중복을 막기 어렵다는 단점이 있다. 도메인 모델 패턴 해당 패턴은 대부분의 비즈니스 로..
Spring MVC 간단 정리
Spring MVC에 앞서 일단 MVC에 대해 간단하게 정리를 하고 가도록 하겠습니다. MVC MVC란 Model, View, Controller를 의미하며, 소프트웨어 디자인 패턴의 일종 Model 클라이언트가 전달하는 정보 또는 데이터, 혹은 클라이언트의 요청에 따라 반환하는 정보 또는 데이터 위 정보 또는 데이터를 가공하고 관리하는 비즈니스 로직도 포함 즉, 정보 또는 데이터 값 및 비즈니스 로직 View 클라이언트의 요청에 따른 반환값을 어떻게 표현하는가?에 대한 부분 정적인 HTML을 반환할지, Model 값을 사용하여 동적인 HTML을 반환할지, 그렇다면 어떻게 렌더링 할지 등에 대한 역할 즉, 단어 뜻 그대로 보이는 부분에 대한 것 Controller 클라이언트의 요청에 따라 동작을 제어하는..
독후감을 쓰다가 작성하는 회고
최근 두 권의 책을 완독 후 느낀 점을 작성하다가 스스로 든 생각과 느낌을 기록한 글이며, 두서없이 편하게 작성된 글임을 참고해주세요. 느리더라도 차근차근 꾸준히 무언가를 할 때 기록을 하지 않고 경험으로만 넘기면서 해오다 보니 '아 이거 저번에 본 건데 뭐였지?'와 같은 경우가 종종 발생하면서 '왜 기록이 중요한지 알겠다! 이제부터 최대한 기록을 해야지!'하고 마음을 먹었으나 이게 생각보다 실천으로 잘 옮겨지지 않았다. 그리고 '이런 간단한 내용은 굳이 기록을 할 필요가 없지 않을까?'와 같은 생각도 기록을 안 하게 되는데 한몫을 했다. 하지만 결국 시간이 흐르고 나서 보면 간단하다고 생각하여 기록을 하지 않은 내용들 또한 까먹거나 헷갈리는 경우가 종종 있다는 것을 깨닫고는 내가 공부하여 학습한 내용들..
함께 자라기를 읽고 느낀 점
해당 글은 "함께 자라기 (애자일로 가는 길) - 김창준"라는 책을 읽고서 느낀점을 자유롭게 작성한 글입니다. 따라서 대부분 개인적인 의견임을 참고해주세요. 좋은 책인 것은 분명하나.. 책의 제목처럼 책의 주제는 함께 성장하는 것에 대한 내용이며 왜 함께 성장하는 것이 좋은지, 실무에서도 어떠한 이유로 함께 해야 하는지?에 대한 내용을 여러 연구 결과를 토대로 잘 설명하고 있다. 그렇기에 어떤 식으로 학습하는 게 중요하고 좋은지, 실무에서 각자 독립적으로 진행하기 보다 함께 하는 게 좋은지, 이러한 방식이 결국 애자일 방법론과 연관 있으며 어떠한 행동들이 큰 도움이 되는지에 관한 내용들을 학습할 수 있었다. 하지만 최종적으로 느낀 점은 '좋은 책인 것은 분명하지만 지금보다는 좀 더 경험과 경력을 쌓고 나..
SpringBoot 기준 log 정리
SpringBoot 프로젝트의 경우 "spring-boot-starter-web" 의존성 내에 "spring-boot-starter-logging" 의존성이 포함되어 있으며, 해당 의존성에는 다음과 같은 로그 관련 라이브러리들이 포함되어있다. logback slf4j log4j 여기서 slf4j는 여러가지 로그 관련 라이브러리들을 통일된 방식으로 사용할 수 있도록 지원하는 인터페이스라고 보면 되고, 실제로 로그를 사용할 수 있도록 지원해주는 라이브러리들이 logback, log4j 라고 보면 된다. 그리고 SpringBoot 프로젝트에서는 기본적으로 logback을 사용한다. 사용 방법 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public Lo..

SpringMVC DispatcherServlet 동작 방식
SpringMVC의 DispatcherServlet 동작 방식에 대한 내용에 앞서 Front Controller 패턴에 대해서 알아보고 넘어가도록 하자 Front Controller 패턴 일단 간단하게 Front Controller 패턴을 적용하지 않는 경우와 적용한 경우에 따른 동작을 그림으로 알아보면 다음과 같다. Front Contoller 패턴을 적용한 것과 적용하지 않은 것의 차이는 그림으로 한눈에 파악할 수 있듯 클라이언트의 요청에 하나의 Servlet으로 관리를 하느냐 아니냐의 차이로 볼 수 있다. 그렇다면 왜 Front Controller 패턴을 사용해야 하는가? 클라이언트의 요청에 대한 입구를 하나로 통일시킬 수 있다. 그렇기에 공통 처리 부분을 관리하기 편해진다. 추가적으로 N:N 관계..

객체지향의 사실과 오해를 읽고 느낀 점
해당 글은 "객체지향의 사실과 오해 - 조영호"라는 책을 읽고서 느낀점을 자유롭게 작성한 글입니다. 따라서 대부분 개인적인 의견임을 참고해주세요! 객체지향.. 이게 맞나? 객체지향에 대해서 대학교 및 개인적으로 어느 정도 찾아보면서 '객체지향이란 이런 것이다'라는 대략적인 개념은 이해하고 있었으나, 오직 C언어만 사용한 개발을 해오던 입장이었기에 직접적인 연관이 없다고 생각하여 제대로 공부를 한 적이 없었다. 그러다가 웹 개발자로 전향을 생각하고 퇴사 후 Java를 공부하면서 객체지향에 대해 자세히 공부를 하게 되었는데.. 개념과 이론만 보고 있자니 이게 무슨 말인가 싶은 내용도 있고, 이걸 어떻게 코드에 녹여야 하는 걸까?라는 고민에 빠지게 되었다. 그렇게 코드를 구현하며 '대강 이런 식이구나~'라는 ..
HTTP status code 정리
인프런에 올라와있는 강의 중 모든 개발자를 위한 HTTP 웹 기본 지식(김영한)를 수강 후 HTTP 상태 코드에 대해 짧게 정리한 글입니다. 각 상태 코드에는 더 많은 세부 코드가 존재하지만 자주 사용되는 코드들만 정리를 하였습니다. 그렇기에 혹시나 해당 글에 정리되어 있는 상태 코드가 전부라고 생각하지 않으셨으면 합니다. (하지만 일반적으로 사용하는 상태 코드 범주 내라면 전부이지 않을까 생각합니다.) 1xx - Informational 요청이 수신되어 처리되고 있다는 의미로 사용 하지만 실제로 사용을 거의 하지 않는 상태 코드이므로 이런게 있다 정도만 알고 넘어가면 된다. 2xx - Succsessful 요청이 정상적으로 처리 되었다는 의미로 사용 개발 진행 시 내부적으로 어떠한 상태 코드들을 사용할..