Java | spring71 Java 동시성 완벽 가이드: 멀티스레드 환경에서 안전한 코드 작성하기 Java로 서버 개발을 하다 보면 동시성 이슈를 한번쯤은 만나게 된다. 개발 후 테스트나 운영 환경에서 여러 사용자가 동시에 접근하는 상황에서 데이터가 꼬이거나, 예상치 못한 결과가 나오는 경험을 한 번쯤은 해봤을 것이다. 그렇다면 왜 자바에서 이런 동시성 이슈가 발생할까? 그 이유는 크게 세 가지로 정리할 수 있다.멀티스레드 환경서버는 여러 요청을 동시에 처리하기 위해 스레드를 병렬로 실행여러 스레드가 같은 객체나 자원에 접근할 경우, 읽기·쓰기 순서가 뒤섞이면서 데이터 충돌 발생 가능JMMCPU 캐시와 메인 메모리 간 불일치 때문에, 한 스레드에서 변경한 값이 다른 스레드에 즉시 반영되지 않을 수 있으며, 이로 인해 문제가 발생하고, 예상치 못한 결과를 만들 수 있음원자성 및 실행 순서 문제i++ 같.. 2025. 9. 1. Spring IoC와 DI 완벽 이해하기(+예시) 스프링을 공부하다 보면 IoC와 DI라는 용어를 계속 마주치게 된다. 처음에는 이 개념들이 어려워 보이지만, 한번 제대로 이해하고 나면 스프링의 핵심이 왜 이것들인지 깨닫게 된다. 사실 이 개념들은 단순히 스프링만의 것이 아니라, 좋은 객체지향 설계의 기본 원칙들이다. 스프링은 이런 원칙들을 프레임워크 차원에서 자동으로 지원해 주는 것이다. 오늘은 IoC와 DI를 개념부터 동작 원리, 실제 코드까지 상세하게 살펴보겠다.참고로, 경력자 면접에서 아직도 물어보는 개념이기도 하다.제어의 역전 (IoC: Inversion of Control)제어의 역전은 이름 그대로 제어권이 뒤바뀌는 것을 의미한다.기존에는 내가 필요한 객체를 new로 개발자가 직접 생성하고 관리했다면, IoC에서는 외부(스프링 컨테이너)가 .. 2025. 8. 31. 스케줄링 보다는 Spring Batch! 기본개념 배치는 생각보다 장점이 많은데, 기존에 작업되어 있던 부분을 개선할 생각을 못했을까? 라는 의문이 들어서 다시 공부해 보았다.주기적으로 통계, 결산, 마감 같은 처리 작업이나 대량 데이터를 일괄 처리하는 작업을 하고 있거나, 할 예정이라면!스프링 배치를 제대로 공부해 보고 적용해 보는 것도 아주 좋은 선택이다. 배치 프로세싱이란?대량 데이터를 일괄 처리하는 방식으로 주기적이거나 조건에 따라 한번에 여러 작업을 처리하는 것을 말한다.특징실시간 처리가 필요 없는 작업에 적합빠른 응답성보다는 안정성과 대량 처리 효율에 초점주요 사용 사례금융 시스템 일괄 / 월간 결산근태 시스템 업무 마감 처리통계 데이터 생성(월간, 연간 등)대량 데이터 마이그레이션스케줄링 vs 배치구분스프링 스케줄링 (Spring Sch.. 2025. 8. 23. JPA 조회 동작 방식 비교 : findById(), getOne(), getReferenceById() JPA 주요 조회 메서드는 아래와 같다. findById() getReferenceById() getOne() → 현재는 Deprecated된 메서드 아무 생각없이 쓰던 findById()와 다른 메서드는 어떤 차이를 가지는지 동작 방식과 구현 코드를 보며 비교해 보자. JpaRepository @Repository public interface BookRepository extends JpaRepository { } JPA를 사용하면 엔티티 단위로 위와 같이 JpaRepository를 상속 받은 Repository interface를 생성 위와 같이 JpaRepository 상속 받는 경우 기존에 구현된 기능을 그대로 사용할 수 있음 사용 가능 주요 메서드 S save(S entity) Iterable.. 2024. 3. 27. 스프링 AOP 기본 개념 잡기! 스프링을 공부하고 서비스를 운영하다 보면 AOP를 적용해야 하는 경우가 생긴다. 핵심 기능은 아니지만, 핵심 기능을 보조하기 위한 부가 기능을 구현해야 하는 경우에 AOP를 사용하게 된다. 기존에 공부하고 사용했던 부분이긴 한데, 오랜만에 강의를 들으면서 공부하니, 정리해 놓으면 좋겠다 싶어서 기본 개념 정리를 해보려 한다. 만약 아래와 같은 고민을 하고 있다면 AOP에 대해 공부해 보면 좋다. 공통적으로 처리해야 하는 로직이 있는데, 중요 관심사는 아니다. 추가 기능을 적용해야할 메서드가 많다. 소스 코드에 핵심 로직이 아닌 불필요 로직이 섞여 있는것이 맘에 들지 않는다. 나는 아래와 같은 요구 사항이 있어서 AOP를 공부하고 실무에 적용한 적이 있다. 관리자 페이지에서 개인정보가 포함된 정보를조회하는.. 2024. 1. 3. Spring boot 3.2.0 마이그레이션 가이드 (+끝 없는 오류 해결 방법!) 토이 프로젝트 백엔드 서비스의 스프링 부트 버전을 3.2.0 으로 업그레이드를 했다. 기존에 스프링 부트를 2.7 버전을 사용하고 있었기 때문에 버전을 변경하는게 간단할줄 알았는데 아니었다...! 아직 회사에서 사용하는 프로젝트들은 2 버전을 모두 사용하고 있기 때문에 버전을 업하는 경우 똑같은 오류를 볼 수밖에 없어서 이김에 정리하려고 한다. 그리고 생각보다 오류 관련해서 포스팅이 별로 없어서 생각보다 헤매면서 삽질을 했기 때문에 나와 같은 다른 개발자들에게 조금의 삽질이라도 덜어 줄 수 있기를! 스프링 부트 3.0 주요 변경 사항 Java EE에서 Jakarta EE API 로 마이그레이션 예시 - (기존) javax.servlet:javax.servlet-api > (변경) jakarta.servl.. 2023. 12. 21. Java 파일 업로드, 다운로드 처리(+파일 사이즈 제한 세팅 방법) 프로그램을 개발하다 보면 파일 업로드, 다운로드 처리하는 경우가 다수 있다. 간단하게 게시판을 만들더라도, 첨부파일을 올리거나 이미지를 올릴 수 있게 하는 기능을 기본적으로 구현한다. 웹 서비스에서 파일 업로드 게시판 서비스를 제공한다면, 게시글을 작성할 때 파일만 업로드하는게 아니라 글을 작성하고 파일도 함께 첨부하게 된다. 이런 경우 일반 데이터는 텍스트로 전달하고 첨부파일은 바이너리 데이터로 전송해야 한다.(파일 업로드 시 파일 데이터는 바이너리 데이터로 전송) HTTP로 데이터 전송 시 entype을 multipart/form-data 전송하면 각각의 항목이 Part로 구분해서 한번에 전달이 된다. Form 태그로 전송 시 아래와 같이 써야 한다. enctype="multipart/form-dat.. 2023. 12. 17. JPA 영속성 컨텍스트 장점(+ 테스트 코드) JPA의 가장 중요한 개념 중 하나가 영속성 컨텍스트라는 것이다. 만약 영속성 컨텍스트를 잘 모르겠다면! 아래 글을 먼저 보고 오길 추천한다. JPA 영속성 컨텍스트 및 내부 동작 방식 JPA 영속성 컨텍스트 및 내부 동작 방식 JPA를 처음 학습하는 경우에 영속성 컨텍스트가 무슨 의미인지 이해하기가 쉽지 않다. 사실 사용하다 보면 자연스럽게 이해가 되긴 하는데, 처음에 해당 개념을 제대로 이해하지 않으면 내 생각 developsd.tistory.com 영속성 컨텍스트는 간단하게 말해서 "엔티티를 영구 저장하는 환경"이라는 뜻이다. 지금은 잘 이해가 가지 않더라도 아래 내용을 보다보면 조금은 이해가 될 것이라 확신한다! 이번 글에서는 영속성 컨텍스의 이점에 대해서 상세하게 설명해 보고자 한다. JPA에서.. 2023. 10. 9. JPA 영속성 컨텍스트 및 내부 동작 방식 JPA를 처음 학습하는 경우에 영속성 컨텍스트가 무슨 의미인지 이해하기가 쉽지 않다. 사실 사용하다 보면 자연스럽게 이해가 되긴 하는데, 처음에 해당 개념을 제대로 이해하지 않으면 내 생각과 다르게 동작하는 것을 보면서 아주 당황할 수 밖에 없다. 그래서 제대로 이해하고 넘어가는 것이 좋다. 영속성 컨텍스트(Persistence context)란? JPA 이해 시 가장 중요한 용어 entity 영구 저장하는 환경 영속성 컨텍스는 논리적인 개념 entityManager를 통해 영속성 컨텍스트에 접근 entity를 저장하거나 조회하면 entityManager는 영속성 컨텍스트에 엔티티를 보관하고 관리함 위에 내용만으로 바로 이해가 되지 않는 것이 정상이다! 보통 애플리케이션에서 데이터베이스에 데이터를 저장하.. 2023. 10. 8. 이전 1 2 3 4 ··· 8 다음 반응형