Jasypt 라이브러리 + 로딩 순서의 충돌
spring.config.import를 사용하여 외부 설정 파일을 가져올 때 Jasypt의 자동 복호화가 제대로 동작하지 않는 문제는 프로퍼티 소스(Property Source)의 로딩 순서 때문에 발생합니다. 문제의 원인: 로딩 순서의 충돌 […]
더 보기 →spring.config.import를 사용하여 외부 설정 파일을 가져올 때 Jasypt의 자동 복호화가 제대로 동작하지 않는 문제는 프로퍼티 소스(Property Source)의 로딩 순서 때문에 발생합니다. 문제의 원인: 로딩 순서의 충돌 […]
더 보기 →이 오류는 이름 그대로 **”암호화/복호화 작업을 수행할 수 없다”**는 의미이며, 원인은 거의 대부분 암/복호화 키(Secret Key)가 일치하지 않거나, Jasypt 설정이 제대로 적용되지 않았기 때문입니다. 원인 1: […]
더 보기 →이 방식은 DB 접속 정보나 API 키 등 민감한 정보를 소스 코드나 설정 파일에 평문으로 노출시키지 않고 안전하게 관리하는 매우 효과적인 방법입니다. 작업 절차 Jasypt […]
더 보기 →세 가지를 한 문장으로 요약한다면: Domain (도메인): 우리 서비스의 핵심 주인공 (예: 회원, 주문). 행동(로직)과 생각(규칙)을 가진 실체. DTO (Data Transfer Object): 우체부 또는 택배 상자. 단순히 데이터를 A에서 B로 안전하게 전달하는 역할만 […]
더 보기 →헥사고날 아키텍처의 핵심은 **”다양한 외부 기술(어댑터)을 포트를 통해 연결할 수 있다”**는 유연성에 있습니다. 따라서 어떤 외부 기술과 연동하느냐에 따라 어댑터 폴더의 이름과 종류는 다양해집니다. adapter/in 하위 […]
더 보기 →port와 service는 헥사고날 아키텍처에서 application 계층의 가장 핵심적이고 필수적인 구성 요소이지만, 애플리케이션의 복잡성과 설계 결정에 따라 다른 폴더를 추가하여 구조를 더 명확하게 만들 수 있습니다. application 패키지 내에 추가될 […]
더 보기 →주문(Order) 기능의 흐름 “사용자(Web)가 책을 주문(place order)한다.” 라는 하나의 유스케이스가 어떻게 각 계층을 통과하는지 따라가 보겠습니다. 1. 인바운드(Inbound) 흐름: 외부 요청이 비즈니스 로직으로 들어오는 과정 외부 […]
더 보기 →헥사고날 아키텍처의 폴더(패키지) 구조 예제 전통적인 계층형 아키텍처(controller, service, repository, domain 패키지가 나란히 있는 구조)와 달리, 헥사고날 아키텍처는 기능 또는 도메인 중심으로 패키지를 구성합니다. “온라인 서점”의 “주문(Order)” 기능을 예로 들어보겠습니다. […]
더 보기 →결론부터 말씀드리면, View Binding이나 Data Binding을 사용하면서 Kotlin의 특정 기능을 활용하면 Butter Knife와 매우 유사한 직관성을 얻을 수 있습니다. 하지만 순수 Java 환경에서는 그와 동일한 수준의 직관성을 […]
더 보기 →과거: Butter Knife 사용법 (Java) Butter Knife는 어노테이션(@BindView, @OnClick)을 사용하여 findViewById와 setOnClickListener를 대체했습니다. 1. build.gradle 설정
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="line"><span>// build.gradle (Module: app)</span></span> <span class="line"><span></span></span> <span class="line"><span>// Java에서 어노테이션 프로세서를 사용하기 위해 필요</span></span> <span class="line"><span>apply plugin: 'com.android.application'</span></span> <span class="line"><span>apply plugin: 'kotlin-android' // 예시를 위해 추가, Java만 사용시 불필요</span></span> <span class="line"><span>apply plugin: 'com.jakewharton.butterknife'</span></span> <span class="line"><span></span></span> <span class="line"><span>android { ... }</span></span> <span class="line"><span></span></span> <span class="line"><span>dependencies {</span></span> <span class="line"><span> implementation 'com.jakewharton:butterknife:10.2.3'</span></span> <span class="line"><span> annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'</span></span> <span class="line"><span>}</span></span></code><code class="whitespace-pre-wrap break-words"><span class="line"><span></span></span> |
2. MainActivity.java 예시 activity_main.xml에 아래와 같은 뷰가 있다고 가정합니다. TextView (id: textView_title) Button (id: button_submit) […]
더 보기 →