Spring
-
Spring) @Transactional 과 Database 의 LockSpring 2025. 1. 14. 22:55
개요 Spring Boot 개발을 시작할 때, 많은 개발자들이 특정 어노테이션을 별다른 생각 없이 사용하는 경향이 있습니다. @Controller, @Service, @Component, @Data 같은 어노테이션들은 마치 마법처럼 애플리케이션의 다양한 부분을 자동으로 연결해 주기 때문에, 초기에는 그 내부 작동 원리를 깊이 이해하지 않고도 원하는 기능을 구현할 수 있습니다. 이러한 편리함은 곧 @Configuration, @NoArgsConstructor 등 더 다양한 어노테이션을 실험하게 만듭니다. 이들을 사용하면서 "그냥 갖다 쓰면 잘 되네?"라는 생각을 하게 되는 경우가 많습니다. 특히, 데이터베이스 트랜잭션 관리에서는 @Transactional 어노테이션이 그러한 경우입니다. 많은 개발자들이 이..
-
Java) 클래스 파일과 바이트 코드Spring 2024. 11. 14. 21:08
개요자바 초보 개발자라면 클래스 로딩 메커니즘이 어떻게 작동하는지 그 전반적인 과정이 잘 보이지 않을 수 있습니다. 일반적으로 개발자는 실행 가능한 JAR 파일이나 애플리케이션의 진입점 클래스 이름을 JVM에 제공하게 되고, JVM은 이 정보를 바탕으로 해당 클래스를 찾아 실행합니다. 이때 애플리케이션에 필요한 모든 의존성도 클래스패스에 존재해야 하며, JVM은 이러한 의존성들 역시 찾아서 로드합니다. 하지만 자바 사양은 이러한 로딩 작업을 애플리케이션 시작 시 모두 수행해야 하는지, 또는 필요할 때마다 동적으로 로드해야 하는지에 대해 구체적인 규정을 두고 있지는 않습니다. 이 글에서는 이러한 클래스 로딩 메커니즘과 클래스 객체의 개념에 대해 살펴보겠습니다. 클래스 로딩 JVM을 실행 컨테이너로 바라보는..
-
Spring) 아키텍처(3) 모노리스 VS MSASpring 2024. 11. 8. 22:20
Monolithic ArchitectureMonolithic Architecture(모노리스 아키텍처)는 애플리케이션을 하나의 큰 단위로 구성하는 아키텍처 스타일입니다. 이 구조에서는 모든 기능이 단일 코드베이스 내에서 하나의 애플리케이션으로 빌드되고 배포됩니다. 일반적으로 웹 애플리케이션에서는 프론트엔드, 비즈니스 로직, 데이터베이스 계층이 모두 하나의 애플리케이션으로 구성됩니다.설명은 어렵지만 그냥 단순하게 Spring boot 뿐만 아니라 서버를 처음 개발하면 가장 먼저 개발하는 아키텍처 방식입니다.서버하나를 만들어서 해당 서버에서 Database, Nosql, MQ 등등 여러 구성체에 중심해서 전계해주는 서버입니다. 모놀리식 애플리케이션은 보통 다음과 같은 구조로 이루어져 있습니다:사용자 인터페..
-
Spring) 아키텍처(2) 소프트웨어 아키텍처란?Spring 2024. 11. 4. 20:16
개요지난글에서 모듈과 멀티모듈에 대해 공부해보았습니다.이번 글에서는 소프트웨어 아키텍처에 대해 알아보고 지난번에 공부한 멀티모듈의 기본개념을 활용하여 어느 아키텍쳐에 반영할것인지에 대한 작성을 해볼 예정입니다. 소프트웨어 아키텍처를 이해하고 있어야 하는 이유 저같은 주니어 개발자같은경우 서버를 개발하면 보통 기능구현에 대해 중점적으로 생각하지, 트레픽에 대해 생각해본적이 없었을것입니다. (저만 그럴수도) 예를들어 단순 게시판 기능을 만들더라도 이 게시판에 1000만명이 몰린다면?이러한 단순한 질문 하나에도 굉장히 "많은 처리 기술"이 존재합니다. 주니어를 넘으려면 이러한 문제를 이해하고 극복해 나가야할것입니다.여기서 문제는 회사에 소속해있기때문에 "많은 처리 기술"에 대해 혼자서 적용하면 이미 서버는 터..
-
Spring) 아키텍처(1) 모듈, 멀티모듈Spring 2024. 11. 2. 16:23
개요회사의 여러 프로젝트를 통해 다양한 개발 방식을 접해보았지만, 현재 진행 중인 서비스의 프로젝트는 체계적인 아키텍처가 부족하고, 일관된 개발 철학도 마련되어 있지 않은 상태입니다. 특히 MSA(Microservices Architecture)를 지향하고 있음에도 불구하고, 진정한 MSA의 장점을 살리지 못한 채 일관성과 원칙이 부족한 방식으로 운영되고 있어 개선이 필요하다고 느끼고 있습니다. 이번 기회를 통해 현재 서비스의 아키텍처 상태를 철저히 분석하고, 앞으로 나아가야 할 아키텍처의 방향을 명확히 설정하려 합니다. 이를 위해 먼저 아키텍처와 설계 원칙에 대해 심도 있게 공부하고, 이를 바탕으로 현 프로젝트에 필요한 설계 방향과 개선 방안을 정립하려고 합니다. 이러한 학습과 분석 과정을 통해 서비스..
-
Java) Checked Exception, Unchecked Exception 그리고 ErrorSpring 2024. 9. 1. 15:51
에러(Error)와 예외(Exception)의 차이에러(Error): JVM에서 발생하는 심각한 문제로 인해 애플리케이션이 실행을 계속할 수 없는 경우입니다. 예를 들어, 메모리 부족, 스택 오버플로우, 클래스 로딩 실패 등이 있습니다. 이러한 문제는 일반적으로 프로그래머가 복구할 수 없습니다.예외(Exception): 프로그램의 논리적 흐름에서 발생할 수 있는 문제이며, 프로그래머가 예외 처리(try-catch 구문)를 통해 복구할 수 있는 문제입니다. 예를 들어, NullPointerException, IOException 등이 있습니다.에러의 종류우선 에러에 따라 어떤 예외처리를 해야할지 알기위해 에러에 대한 종류에 대해 먼저 알아야 합니다.1. 컴파일 에러 (Compile-Time Error)정의..
-
Spring) @Autowired 와 생성자 주입(Constructor Injection)Spring 2024. 8. 27. 23:40
개요@Servicepublic class MyService { public String getServiceMessage() { return "Hello from Service!"; }}위와같은 @Service Bean 이 있을때 이것을 사용하는 클래스에 어떻게 주입할것인가? 처음 Spring 을 배울때 무지성 @Autowired 를 사용했던적이 있다. 이유도 모르고 Bean 을 등록하면 (사실이때 Bean 이 뭔지도 제대로 몰랐다) @Autowired 를 선언한 변수에서 사용할수있다는것정도만 알고 막 사용했다.@RestController@RequestMapping("/api")public class MyController { @Autowired private MyServ..
-
Spring) Bean 의 생명주기(Bean Lifecycle)Spring 2024. 8. 20. 19:57
개요Spring 에서 가장 핵심적인 기능인 Bean 은 실제 콩(Bean) 처럼 생명 주기를 가지고있다.처음에 생명주기라고해서 주기적으로 생성되고 죽는건가? 싶었지만, 그 뜻이 아니라 단순하게 생성되고 마무리되기까지의 과정이다. 사실 생명주기를 왜 알아야 하는가 싶었다, 왜냐하면 Bean 은 Spring 이 실행될때 생성하고 나서 끝 아닌가? 싶기도 했고Spring 이 종료되면 메모리관리고뭐고 이제 서버가 끝나는건데 없어지는것까지 알아야하나싶었다. 하지만 생명주기를 알아야하는 이유는 이 생명주기를 알고 그 사이사이를 커스터마이징을 할 수 있고 서버가 시작하면서 Bean 설정 초기화와 종료전 수집관련해서 꼭 필요한역할이라는것을 알게되었다.그렇기에 이번글은 Bean 의 생명주기에 대해 공부해보려고한다. Be..