전체 글

생각을 정리중입니다....
지난 주말에 Spring Camp 2024 다녀오고 나서 좀 늦은 감이 있지만 후기를 써보려고 한다. 이번에도 마찬가지로 콘서트 티켓팅을 예약하듯 인프런 사이트 들어가서 후다닥 신청해서 티켓팅에 성공하였다!지난번보다 장소가 크기도 하고 발표도 많아서 인원을 많이 수용하겠구나라고 생각이 들었는데 1분 정도에 다 마감이 되었다고 해서 관심이 더 많아졌네라고 생각이 들었다. 세션 진행 전! 세션에 입장전 카카오 뱅크부스가 있어서 "무엇이든 물어보세요" 이라는 프로그램을 진행하길래 한번 신청하여 이야기를 나누었다. 사실 채용, 회사에 대한 이야기보다 카카오뱅크 서버 개발자분과 소통하면서 평소에 JPA를 쓰면서 의구심이 들었던 것 중에 하나가 JPA 엔티티에 도메인 로직을 어디까지 포함시켜야 하냐?라는 내용을 나..
평소에 피처 토글과 어떠한 관점에서 서비스를 분리해야 할지에 대해서 관심이 많았었는데마침 에스씨지랩개발팀과 한빛앤에서 작은 서비스 조금씩 개선하기라는 주제로 세미나를 열어 참여하게 되었습니다.  규모가 커지면서 발생하기 시작한 모놀리식 배포 문제 (최범균)첫번째 세션은 왜 서비스를 분리하게 되었고 어떠한 기준으로 분리를 진행했는지에 대한 설명을 진행하였습니다. 서비스가 커지면서 동시진행업무 증가 ->  생명주기가 긴 브랜치가 많아짐 -> 배포를 위한 머지가 수고스러움 이에 따라 결국 서비스 출시 속도가 느려졌고 이때문에 서비스 분리를 결정하게 되었음을 설명해 주셨습니다.  이때, 분리 대상은 코어 한 부분이 아닌 연관이 적은 작은 규모의 분리부터 시작하여 진행을 진행을 했다고 합니다.분리를 진행하고 나..
· 개발
Accept 란? Accept 요청 HTTP 헤더는 MIME 타입으로 표현되는 클라이언트가 이해가 가능한 컨텐츠 타입이 무엇인지 알려줍니다. 참조링크(mdn) 즉, 클라이언트에서 Accept header에 타입을 서버에게 알려줌로써 서버에게 나 이러한 타입의 응답을 받을수 있어 라는 것을 알려줍니다. 그러면, Spring 같은 프레임워크에서는 Accept의 값에 의해서 적절한 응답에 대한 MessageConverter을 선택해서 전달해주지 않을까?라는 의문이 발생했고 코드로 따라가 보자. Spring에서의 Accept 처리 1. RequestResponseBodyMethodProcessor.class -> handleReturnValue RequestResponseBodyMethodProcessor.cl..
· 개발
트랜잭션이란? 트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위. 하나의 트랜잭션은 여러 개의 연산을 포함. 이때, 모두 성공적으로 완료됨 (Commit), 아니면 전혀 실행되지 않아야 함 (Rollback) - 데이터 일관성, 무결성을 유지하기 위해서 선언적인 트랜잭션 관리 선언적인 트랜잭션 관리란? 트랜잭션을 처리하는 코드를 직접 작성하지 않고, 어노테이션이나 XML을 통해 경계를 설정하는 것 이로써, 개발자는 트랜잭션 관리 로직에 신경 쓸 필요 없이 비지니스 로직에 집중할 수 있다. @Transactional @Target({ElementType.TYPE, ElementType.METHOD})으로 선언되어 있어 클래스, 메서드 영역에 작성한다. @Retention(Retentio..
· 개발
사내에 개발 표준을 수립할 때 정리한 레이어드 아키텍처에 대해서 정리하고자 합니다. 그중 4계층형 아키텍처에 대해서 정리합니다. 1. 레이어드 (계층형) 아키텍처란? 시스템을 각 관심사를 기준으로 계층으로 분리하여, 각 계층의 특정한 책임을 가지고 상호 작용하도록 구성하는 방식 2. 레이어드 아키텍처의 특징 각 레이어는 독립적인 모듈로 구성합니다. 각 계층은 고유한 관심사를 가지고 있으며 시스템의 복잡성을 줄여 줄 수 있습니다. 하위 레이어는 상위 레이어를 의존하지 않습니다. 3. 4계층 아키텍처 User Interface Layer (UI Layer) 사용자와 시스템(애플리케이션)간의 상호작용 (연결)을 하기 위한 레이어 EX) ApprovalController // ApprovalResponse @G..
Kakao Tech Meet 4회 의 세션 중 JDK 21에 출시된 VirtualThread에 대해 관심이 있어 참여 신청을 했었고 Kakao Tech Meet(2023년 12월 12일) 오프라인 참석자로 선정이 되어 방문을 하게 되었습니다. 출퇴근시간이 빠른 장점으로 1등으로 먼저 세션 장에 방문하였고 블로그 후기에서는 작성하지 않았지만 지난 DevRel 행사에서 발표를 하시던 조훈 님께서 맞이해주셔서 약간의 내적 친밀감이 느껴졌습니다. JDK 21의 신기능 Virtual Thread 알아보기 - 안정수 님 첫번째 세션에서는 안정수 님의 VirtualThread 발표였고 지난 Songdo GDG devfest 행사 에서의 이해하지 못했던 부분들에 정리가 되었던 파트였습니다. VirtualThread은 ..
설정 파일 위치 CLI 자격증명 파일 ~/.aws/credentials CLI 설정 파일 ~/.aws/config 우선순위는 CLI 자격 증명 파일이 우선 순위가 높습니다. 커멘드 라인으로 변경하는 방법 AWS CLI 사용하기 공식문서 https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-files.html#cli-configure-files-format-profile 어카운트 리스트 (어카운트 리스트 조회) aws configure list 어카운트 리스트 이름만 조회 aws configure list-profiles 환경 변수로 변경하기 export AWS_PROFILE=user1 AWS Toolkit 으로 변경 하는 방법 인텔리제..
· 일상
이번에 또 다른 자극을 얻기 위해 송도 GDG DevFest 행사에 참여하였습니다.🔥 참 "DevFest"는 저 나름의 뜻이 있는 세미나이기도 한데, 2018년도 개발 신생아시절 세미나에 대한 신선한 충격을 받고 지식과 개발에 대한 열정에 대한 동기부여가 되었고, 이때의 경험이 좋아서 세미나를 지속적으로 참여하면서 성장했던 귀중한 세미나였었습니다. 이번 GDG DevFest 중에 송도가 지역에서 규모가 제일 크다 하고 세미나에 처음 눈 뜬날을 기억하는 마음으로 참여하게 되었습니다. 지역에서 가장 큰 세미나인 만큼 다양한 주제와 세션(약 50개..)들이 있었고 아래의 세션들을 선정하여 듣기로 하였습니다. 세션을 들으면서 느낀 점을 리뷰 하려고 합니다. 1. 효과적인 단위 테스트 - 장동혁 님 세미나를 가면..
· 짤막팁
Ultimate Todoist Sync을 활용하여 TodoIst 와 Obsidian을 연동하는 방법을 기술합니다. 플러그인 저장소 : https://github.com/HeroBlackInk/ultimate-todoist-sync-for-obsidian 1. 옵시디언 Setting창에서 플러그인을 설정 정보 작성하기 2. Todoist 설정 텝에서 API 토큰을 발급하기 todoist 설정 > 통합 > 개발자 > API 토큰 복사 3. 옵시디언 Setting창에서 플러그인설정에서 API 토큰 넣기 4. 작성해보기 양식으로 작성 하면 할일에 추가가 된다. - [ ] + 작업내용 + #todist 작성할땐 백틱을 제거해주자 -[ ] 일하기 `#todoist` 옵시디언 화면 일하기 link #todoist %..
· 개발/JAVA
관련 글은 Spring Event의 동작을 한번 소스를 까면서 동작을 이해하는 과정을 다룹니다. Spring Event 동작 흐름은 어떻게 될까? ApplicationEventPulisher의 이벤트를 발행 -> ApplicationEventMulticaster에 의해 구독(모니터링)된 이벤트 리스너들을 호출하게 됩니다. 동작 흐름을 코드로 따라가 보자 1. ApplicationEventPulisher에 이벤트를 발행 2. ApplicationEventPulisher에서 옵저버 역할을 하는 ApplicationEventMulticaster에 일을 시킵니다. 3. ApplicationEventMulticaster (구현체 SimpleApplicationEventMulticaster) getApplicati..
· 개발/JAVA
"Self Invocation"은 개념상으로는 자기 자신을 호출하는 것을 의미한다. AOP에서 Self Invocation 문제란? 객체 소속에 메서드에서 자기 자신의 메서드를 호출했을 때 AOP가 동작하지 않는 현상을 의미한다. 원인 Spring AOP는 프록시 기반으로 동작하게 됩니다. AOP 대상의 객체는 DI하게 될 때 실제 객체가 아닌 프록시 객체가 주입 되게 됩니다. 객체 내에서 해당 객체 메서드를 호출하게 되면 프록시 객체에 의해 호출되는 것이 아닌 직접호출로 이루어지게 되어 AOP가 동작하지 않게 됩니다. 예제 AOP 동작 시킬 어노테이션 @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface AopGoGo { ..
TestFixture란? 테스트 코드에서 공유되는 초기 상태나 리소스를 설정하는 데 사용되는 개념 테스트 코드를 작성할 때마다 반복적으로 실행되는 코드를 줄이고, 테스트 코드의 가독성을 높이기 위해 사용 TestFixture 예시 public static Car 가격이_100000인_테슬라() { return Car.builder() .name("Tesla") .price(100000) .build(); } 사용 @Test @DisplayName("가격이_100000인_테슬라 주문 생성") void createOrder() { // given Car car = CarFixture.가격이_100000인_테슬라(); int quantity = 2; // when Order order = Order.build..
beng9re
생각하고 분석하고