본문 바로가기

전체 글70

[JPA] JPA의 영속성 컨텍스트란? JPA 를 이해하기 위해선 EntityManagerFactory 와 EntityManager 를 먼저 알아야한다. EntityManagerFactory & EntityManager EntityManagerFactory 는 이름 그대로 EntityManager를 만드는 공장이다. 애플리케이션 전체에서 공유하도록 설게되어 있으므로 단 한 개만 생성한다. EntityManager는 EntityManagerFactory를 이용하여 생성하며 이를 생성하는 비용은 거의 들지 않는다. EntityManagerFactory 는 여러 스레드가 동시에 접근해도 안전하므로 다른 스레드간 공유할 수 있다. 반면, EntityManager 는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간 공유를 하면 안된다.. 2022. 6. 25.
[Java] MyBatis 와 JPA 의 차이 Persistence Framework JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장합니다. Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있습니다. JPA, Hibernate, Mybatis 등 SQL Mapper 와 ORM Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다고 하였습니다. 대표적인 예로 SQL Mapper 는 Mybatis, ORM 은 JPA 가 있습니다. ORM은 Object-relational mapping(객체 관계 매핑) 의 약자로 객체는 객체대로, RDB는 RDB대로 설계하여 데이터베이스 객체를 자바 객체로 매.. 2022. 2. 14.
[Project] Resilience4j 로 Circuit Breaker 구현하기 (2) 들어가며 이전 글에서 Circuit break pattern 에 대해서 알아봤습니다. 이번엔 이를 resilience4j를 사용하여 적용하는 과정에 대해서 적어보도록 하겠습니다. Resilience4j이란? Netflix Hystrix 영감을 받아 만들어진 라이브러리로 Hystrix 보다 가볍고 사용하기 쉬운 내결함성 라이브러리입니다. Netflix의 Hystrix을 사용하지 않고 Resilience4j 을 사용하는 이유는 Hystrix는 더이상 개발이 되지 않는 유지보수 상태이며 Resilience4j 보다 많은 외부 종속성을 가지고 있습니다. 그에 비해 Resilience4j 는 외부 종속성이 없고, 자바 함수형 프로그래밍을 위해 설계되었습니다. 따라서 전 외부 의존성이 적고, 현재 Spring-cl.. 2022. 1. 28.
[Spring Boot] Error creating bean with name 'configurationPropertiesBeans' 에러 spring boot에서 spring cloud 의존성을 추가하니 Application이 실행되자마자 에러를 발생시켰습니다. 에러코드는 다음과 같습니다. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exceptio.. 2022. 1. 26.
[Project] Circuit Breaker Pattern 에 대해서 알아보자. (1) 들어가며 프로젝트 주문 기능을 구현하면서 카카오 지도 API를 사용하는 방법을 택했습니다. 하지만, 만약 API에서 에러가 난다면? 이라는 질문을 만났습니다. 저는 당당하게 Kakao API (이하 외부 API)에 등록되어 있는 에러 코드별로 예외 처리를 할 것 입니다. 라고 답변을 했습니다. 이에 만약 그 API가 외부 응답 코드조차 보낼 수 없는 장애가 발생했다면? 이라는 질문을 다시 듣게 되었고 이는 Circuit Breaker Pattern을 알아보게 되는 계기가 되었습니다. Circuit Breaker Pattern 이 왜 필요할까? 위에서 언급했듯이 외부 API를 사용할 때 응답이 오지 않는 경우 또는 늦어지는 경우가 발생할 수 있습니다. 응답을 받지 못한 요청들은 응답을 받을 때까지 기다리고.. 2022. 1. 26.
[Spring] 빈 생명주기 콜백 빈 생명주기 콜백에 대해 알아보자. 🔍 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 객체가 초기화되었을 때 해야하는 작업, 객체가 죽기 직전에 안전하게 메소드를 호출하는 방법 등 의 작업이 필요하다. 스프링 빈은 간단하게 다음과 같이 라이프사이클을 가진다. 객체성성 → 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계 주입이 끝난 다음에 필요한 데이터를 사용할 수 있는 준비가 완료된다. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메소드를 통해서 초기화 시점을 알려주는 다양한 기능 제공 스프링은 스프링 컨테이너가 종료되.. 2022. 1. 19.
[회고록] 2021년 회고 2021년 돌아보기 Happy New Year 😊 저에게 2021년은 많은 생각들과 감정들이 스쳐지나갔던 해인 것 같습니다. 2021년에 겪은 모든 일들은 저에게 각기 다른 깨달음과 배움을 주고 새로운 무언가를 생각해내게 해주는 값진 경험들이었습니다. 2021년 1월 ~ 6월 입사는 2020년 11월에 했지만 SI 특성상 프로젝트에 투입되지 않으면 할 일이 없었습니다. 프로젝트에 투입되기 전 두달 동안은 사무실에 앉아서 개인 공부하는 시간. 그뿐이었습니다. 1월부터 무려 11개월 기간인 프로젝트로 파견을 나갔습니다. 그렇기에 입사한 지 두 달만에 설레는 마음 가득하게 투입한 프로젝트. 하지만, 이상과 현실은 다를 수 밖에 없는 걸까요. ‘개발자’라는 직업으로 들어갔지만 개발보다는 문서작업의 연속이었습니다.. 2022. 1. 3.
[CI/CD] CI/CD란? - 지속적 통합/지속적 배포 프로젝트를 진행하며 CI/CD라는 용어대 대해 알아보고 또한 현재 진행중인 프로젝트에 어떻게 적용시키는 게 좋을지에 대해 생각해보는 시간을 가졌습니다. 오늘은 CI/CD에 대한 개념을 알아보도록 하겠습니다. CI/CD? 우선 CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 짧은 주기로 고객에게 제공하는 방법입니다. CI/CD의 기본 개념은 지속적인 통합, 테스트, 서비스, 배포입니다. CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제을 해결하기 위한 솔루션입니다. CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 CI/CD 파이프라인이라고 부릅니다. CI란? Con.. 2021. 12. 28.
[Spring] 스프링 부트 Gradle 의존성 관리 및 Plugin 스프링 부트 Gradle Gradle 은 의존관계가 있는 라이브러리를 함께 다운로드 합니다. 예시로 살펴보도록 하겠습니다. 저는 프로젝트 생성시 의존성을 spring-boot-starter-thymeleaf 와 spring-boot-starter-web을 추가했습니다. 그래서 build.gradle을 보면 다음과 같이 의존성이 추가된 것을 볼 수 있습니다. 하지만 저는 두 개의 의존성만 추가했는데 실제 추가된 라이브러리를 보니 다음과 같이 추가되어 있었습니다. 어떻게 추가하지않은 다음과 같은 라이브러리들이 존재하는걸까요? 맨 처음 언급했듯이 Gradle은 의존관계의 라이브러리를 함께 다운로드합니다. Gradle 목록을 클릭하여 한 번 살펴보겠습니다. 의존성을 추가하겠다고 명시했던 thymeleaf와 we.. 2021. 12. 22.
[Spring] 스프링 시큐리티 알아보기 프로젝트를 진행하다가 비밀번호 암호화를 위해 스프링 시큐리티를 적용하려고 합니다. 사실 공식 문서를 보고, 구글링을 통해 알아보았지만 완벽하게 이해가 된 것 같지는 않습니다. 그래도 글을 작성하면 조금이라도 이해가 더 될까 싶어 작성하게 되었습니다. 💡 스프링 시큐리티(Spring Security)란 스프링 시큐리티는 인증, 권한 부여 및 일반적인 공격에 대한 보호를 제공하는 프레임워크입니다. 즉, 인증과 인가를 담당하는 프레임워크입니다. 그렇다면 인증과 인가는 무엇일까요? 보안 용어를 잠시 살펴보도록 하죠 접근 주체(Principal) : 보호된 리소스에 접근하는 대상 인증(Authentication) : 보호된 리소스에 접근한 대상에 대해 이 유저가 누구인지, 애플리케이션의 작업을 수행해도 되는 주체.. 2021. 12. 17.