본문 바로가기

Transaction 동작 원리, JDBC 기본에 충실한 과정(JPA, Hibernate, Spring's @Transactional) JDBC 트랜잭션에 대한 이해 Transaction 기본 동작 원리를 익히기 위해서 점진적인 접근을 할 것입니다. (두괄식X 미괄식O) 궁극적으로는 @Transactional 이 어떻게 돌아가는지를 알아볼 것이지만, 우선은 그것보다도 중요한 JDBC에서 트랜잭션을 사용하는 방법에 대해서 이해하고 넘어갈 것입니다. Spring의 @Transactional 애노테이션을 쓰거나, JPA(Hibernate), JOOQ 등을 쓰면 사실 라이브러리내에서 관리되므로 아래와 같은 문제는 일어날 일이 없습니다. 앞서 언급한대로 원활한 이해를 위해 아래 JDBC가 트랜잭션을 다루는 코드를 설명하겠습니다. import java.sql.Connection; Connection connection = dataSource.get..
자바 동기화, 어설프게 아는 사람이 더 무섭다(java synchronized에 대한 착각, thread-safe) '동기화'문제로 고민한 썰 동기화 문제 이펙티브 자바를 읽던 중, 아이템 78에 있는 자바 동기화 문제로 다양한 상상(?)을 했던 썰을 풀려고 합니다. import java.util.concurrent.TimeUnit; public class Main { private static boolean stopRequested; public static void main(String[] args) throws InterruptedException{ System.out.println("hello world!"); Thread backgroundThread = new Thread(() -> { int i=0; while(!stopRequested){ i++; } }); backgroundThread.start();..
Kotlin IN ACTION 6장 정리(코틀린 타입 시스템, 어떻게 코틀린은 null처리를 우아하게 할까?) null이 될 수 있는 타입과 null 처리 구문 null이 될 수 없는 타입의 장점 null이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시점에 검사하여 예외 발생의 가능성을 줄이는 특징을 갖습니다. //자바에서 하던 것 int (String str) { if(str == null) { throw new NumberFormatException("null"); } //...기타 작업 } 자바에서는 메소드의 파라미터로 레퍼런스 타입이 오면 대부분 null인지 아닌지 고민하고 null처리를 별도로 해야할지 고민했습니다. //코틀린에서 null을 다루는 방법 fun parseInt(str: String):Int { // 바로 작업 } 코틀린에서 null이 될 수 없는 타입과 null이 ..
Spring MVC의 핵심 객체 DispatcherServlet에 대한 모든 것(DispatcherServlet이 하는 역할 정리, 동작 프로세스) DispatcherServlet 스프링 MVC는 모든 요청(Request)을 받아 실제 작업은 다른 컴포넌트로 위임하는 DispatcherServlet 을 두어 프론트 컨트롤러 패턴으로 디자인되었습니다. DispatcherServlet 은 Servlet 사양에 맞게 선언되어야 하고 매핑되어야 합니다. 스프링에서는 web.xml 파일에 정의하고, 요새는 스프링과 스프링부트에서는 자바 설정을 사용해서 정의합니다. 결과적으로, DispatcherServlet 은 스프링 설정을 사용하여 위임할 컴포넌트를 찾습니다. (해당 컴포넌트는 Request Mapping, View Resolution, Exception handling, ...의 작업을 합니다.) 아래 코드는 자바 스프링 설정을 이용한 Dispatcher..
Kotlin 공식 Example로 공부하기 - Collections#2(associateBy, groupBy, partition, flatMap, sorted, withDefault, zip, getOrElse) Collections (2) 저는 전문 번역가도 아니고, 의역을 넘어 오역, 심지어 그냥 제가 읽고 싶은대로 읽은 내용이 있을 수 있습니다. 개인 공부를 한 것을 포스트로 남기고 있으며 틀린 부분이 있으면 지적해주시면 수정하도록 하겠습니다. 원문 : https://play.kotlinlang.org/byExample/05_Collections/01_List Collections 부분은 꽤 길어서 나누어 작성했습니다. associateBy, groupBy associateBy 함수와 groupBy 함수는 지정된 키(Key)에 의해 인덱싱된 컬렉션의 원소로부터 Map을 만듭니다. 키(Key)는 KeySelector 파라미터에서 정의됩니다. 뿐만 아니라 옵션으로 valueSelector 를 정의할 수 있습니다..
Spring Environment 스프링 애플리케이션의 환경에 접근하여 설정 값을 얻어오는 방법(feat. ApplicationContext의 다른 기능, profiles, @Profile) Environment 스프링(Spring)에서 제공하는 인터페이스 중 Environment에 대해서 알아볼 예정이다. Environment 는 말 그대로 스프링 환경이자 설정과 관련된 인터페이스다. (구글에 검색하면 Environment의 동의어로 Setting이 있다.) 어떤 환경 설정에 접근할 수 있는 인터페이스일까? 바로 Profiles 설정과 Property 설정에 접근할 수 있다. 아까부터 포스트의 제목을 포함해서 자꾸 접근한다고 하는데, 그 이유는 설정 값을 변경하는 건 불가능하고 접근해서 값을 가져올 수만 있기 때문이다. (ConfigurableEnvironment 인터페이스로 캐스팅하여 설정 값을 추가할 순 있지만 Environment 인터페이스로는 불가능하다.) ApplicationCon..
Servlet에 대한 개념없이 스프링을 했네요? (급하게 알아보는 스프링 기반 기술 Servlet, Servlet Context, Application Context, ...) 급하게 알아보는 스프링 기반 기술 이름은 아주 거창하게 "스프링 기반 기술" 이라고 지어봤습니다. 배경 최근에 첫 이직을 했습니다. 낯설기도하고 약간의 긴장감과 약간의 두려움이 합쳐져서 우당탕탕(?)하고 있습니다. 그러다가 이제 회사 프로젝트(소스 코드)를 좀 보려고하니, 스프링(Spring)이었습니다. 스프링부트(Springboot)를 써왔어서 큰 거부감은 없었기때문에 볼 만 하겠지 했는데... 음? Servlet, ServletContext, ApplicationContext, ContextLoaderListener, ... 다양한 ~Context의 향연이 펼쳐지며 아차 싶었습니다. 스프링부트에서도 자바 소스(Java Config)로 설정을 했었지만 Servlet으로 자바 소스 설정을 하니까 기본기(..
Kotlin IN ACTION 2장 정리(코틀린 기초 : 변수, 함수, 클래스, enum, 프로퍼티, for, while, is, exception) 2장 코틀린 기초 변수, 함수, 클래스, ... 변수 선언 방법 val question = "코틀린 기초는 몇 장인가" val answer = 2 //val answer:Int = 2 타입을 적어도 되고 실제 값에서 추론이 가능하면 생략해도 됨 val pi = 3.14 //Double 추론 val vs var val : 값을 뜻하는 value에서 따온 것으로, 불변(Immutable)값을 저장하는 변수다. 자바의 final 처럼 초기화하고 나면 다른 값으로 재대입이 불가능하다. var : 변수를 뜻하는 variable에서 따온 것으로, 가변(mutable)값을 저장하는 변수다. 재대입이 가능하다. val languages = arrayListOf("Java") languages.add("Kotlin") ..