전체 글

좋은 영향력을 전파하기 위해 노력하는 엔지니어 리오입니다.
· CS
옵저버란? Observer를 직역하자면 어떤 일을 하는지 지켜보지만 어떠한 행동을 취하지 않는 사람이라는 뜻이다. 옛날에 우리가 많이 했었던 스타크래프트 있던 옵저버라는 유닛 또한 시야를 밝혀주고 아군들에게 공유할 뿐 어떠한 공격도 할 수 없는 유닛이였다. 그렇다면 프로그래밍에서의 옵저버는 무슨 역활을 하고 의미하는 것일까? 뉴스 서비스를 통해 이해하기 처음에는 A사, B사, C사의 외부 API를 받아서 보여주는 기능을 개발하였습니다. 아래와 같은 시스템을 구현해야된다고 했을 때에 옵저버 패턴 형식으로 구현하게 된다면 옵저버 패턴이 어떠한 장점을 가지고 있고 어떠한 상황에 사용해야 되는지 쉽게 알 수 있다. 뉴스 구독 서비스의 구현 뉴스 에이전시 public class NewsAgency { privat..
· CS
전략 패턴 결제 플랫폼을 만드는데 카드마다 다른 동작을 사용한다고 정의하고 클래스 다이어그램을 그려보면 아래와 같다. 환불, 포인트 적립은 동일하게 동작하지만 결제만은 다르게 동작한다. 라고 가정한다면 위와같이 슈퍼 클래스를 만들고 결제만 재정의하여 상속하는 구조가 나오게 됩니다. 이렇게 구현한 상태에서 요구사항이 추가되어 할부결제가 추가되었다. 위와같이 할부결제를 카드에 추가한다면 할부가 되지 않는 체크카드와 포인트카드도 할부로 결제가 됩니다. 이러한 문제를 해결하려면 아래처럼 재정의하여 아무것도 하지않는 메서드로 정의하여야 한다. public class CheckCard { @Override public void intsallmentPayment() { } } 이러한 구조로 유지보수하다가 처음 보는 ..
· 일상
처음에 학생 때에는 뭔가 목표와 꿈이 있었다기 보다는 흘러가는대로 삶을 살아왔던 것 같다. 그래도 디자인에 관심이 있어서 관련된 과에 들어가서 포토샵, 일러스트, 영상편집 등을 배웠었지만 아쉽게도 디자인이라는 길은 나에게 맞지 않았었고 어영부영 세월을 보내다가 입대를 하고 복학하게 되었다. 그러다가 우연히 화이트 해커 양성 인턴쉽에 들어가게 되었고 거기에서 멘토분이 들려주던 화이트 해커가 되기까지의 이야기와 IT 분야에서 종사하고 있는 여러 사람들이 더 높은 수준의 발전을 위해 거리낌없이 지식을 공유하고 오픈소스를 통해 기여한다는 문화를 듣고 보면서 홀린 것 처럼 관심을 가지게 되었고 그렇게 개발자의 길이 시작되었다. 2019년 ~ 2021년의 정리 2019년 개발이라는 것을 무작정 더 공부해보기 위해 ..
· JAVA/JPA
동일성 보장 영속성 컨텍스트는 자신이 관리하는 영속 엔티티 한에서는 동일성을 보장한다. 프록시로 조회했을 때도 마찬가지다. 예제 @Test public void 영속성_테스트() { Member newMember = new Member("member1"); em.persist(newMember); em.flush(); em.clear(); Member refMember = em.getReference(Member.class, newMember.getId()); Member findMember = em.find(Member.class, newMember.getId()); System.out.println("refMember Type = " + refMember.getClass()); System.out.p..
· JAVA/JPA
JPA는 영속성 컨텍스트 내부에서 1차 캐시를 통해 엔티티를 저장하고 생명주기를 관리한다. 그렇기 때문에 1차 캐시를 통해 데이터의 변경을 감지하고 조회할 때도 데이터베이스를 통해 가져올 필요없이 1차캐시 내부에서 가져와서 사용하게 됩니다. 이러한 장점은 어플리케이션 반복 가능해서 읽기가 가능하게 한다. 덕분에 같은 엔티티를 조회시 데이터 베이스를 통해 다시 가져오거나 컨텍스트에 등록할 필요가 없이 재사용할 수 있다. 동일성 테스트 @Service @Transactional @RequiredArgsConstructor public class MemberService { private final MemberRepository memberRepository; public Long join(Member mem..
· JAVA/JPA
JPA는 여러가지 Exception을 제공한다. 그리고 해당 Exception은 PersistenceException을 상속하기 때문에 모두 PersistenceException의 자식이다. 참고로 PersistenceException은 RuntimeException을 상속하여 정의되었다. Persistence Exception 과 Transaction JPA Exception은 크게 두가지로 나뉠 수 있다. 트랜잭션의 롤백을 표시하는 Exception 트랜잭션의 롤백을 표시하지않는 Exception 트랙잭션을 롤백을 표시한다는 것은 간단하게 말하자면 스프링에서 트랜잭션을 사용하려고할 때 내부 쓰레드가 rollback only mark가 되어있는지 확인하고 안되어 있다면 정상적으로 비지니스 로직을 처리하..
ri5
리오의 개발일지