[Gradle] runtimeOnly, implementation, compileOnly, api 차이
·
Programming/Java,Back-end
classpath우선 가장 먼저 classpath의 개념과 종류를 알아보자.classpath는 클래스나 jar 파일이 존재하는 위치다. JVM이 프로그램을 실행할 때, 클래스 파일을 찾는데 기준이 되는 경로를 말한다. compileClassPath vs runtimeClassPathGradle 프로젝트의 의존성 관리를 위해 사용되는 두가지 속성이다. compileClassPath프로젝트의 소스 코드를 컴파일 하는 동안 필요한 모든 클래스 파일과 라이브러리를 포함한다. runtimeClassPath프로젝트를 실행할 때 필요한 모든 클래스 파일과 라이브러리를 포함한다. 초록색은 사용자가 의존성을 선언할 때 사용한다.분홍색은 구성요소가 라이브러리를 컴파일하거나 실행할 때 사용한다.파란색은 구성 요소 자체 사용..
[Java] 메인 메소드 존재 이유, 매개변수 String[] args에 대하여
·
Programming/Java,Back-end
✔️ 메인 메소드(main method)의 역할 자바 이외에도 C언어 등 프로그래밍 언어에는 메인 메소드/메인 함수가 존재한다. 과연 이 메인의 역할이라는게 뭘까? 왜 존재하는걸까?메인 메소드 및 함수는 프로그램 실행을 위한 시작 지점 역할을 한다.  프로그래밍이 시작되는 메모리 할당 시점부터 진입을 위한 함수가 필요하다.  그러나, 메인 메소드가 존재하지 않으면 프로그램은 도대체 어떤 코드부터 읽어서 어떻게 시작해야될지를 모른다. 그렇기에 이 메인 메소드가 존재해야 프로세스화 될 수 있고 실행이 될 수 있다.메인 메소드가 반드시 있어야 프로그램으로써 가치를 만들어갈 수 있다. ✔️ 매개변수 String[] args자바의 메인 메소드 코드를 살펴보자.public static void main(String..
[Spring] 스프링에서 사용되는 디자인 패턴들
·
Programming/Spring,JPA
디자인 패턴이란?반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션이다. 프로그램을 작성하다보면 프로그래머들은 비슷비슷한 상황에 직면하게 되는데, 그러한 상황에서 해결할 수 있는 솔루션이라고 생각하면 된다.어댑터 패턴✔️ 어댑터 패턴이란?호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 하는 디자인 패턴으로, 호출 당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴.  ✔️실생활에서의 어댑터우린 이미 실생화에서 어댑터를 사용하고 있다. 나는 아이폰 충전기를 가지고 있는데, C타입의 기기를 충전하기 위해선 어탭터를 이용하여 충전할 수 있다.  ✔️ 구현 방법구현 방법은 위 그림과 같다. 어댑터는 한 객체의 인터페이스를 구현하고 다른 객체를..
[Spring] 스프링 삼각형(IoC/DI, AOP, PSA)
·
Programming/Spring,JPA
✔️ DI(Dependency Injection)*의존성 주입 의존성 주입에 대해 살펴보기 전에 의존성(Dependency)이란 무엇인지에 대한 정의가 필요하다. 프로그래밍에서 이 의존성이란 무엇일까?  의존성/의존 관계란?1. 코드 레벨(클래스 레벨)의 의존 관계 : Supplier가 변경되면, Client 코드가 영향을 받는다. 2. 사용 의존 관계/오브젝트 의존 관계 : A 오브젝트가 B 오브젝트를 사용하면 A가 B를 의존하고 있다고 표현한다.​ 이러한 의존 관계에서 A는 B없이 작동할 수 없다. 또한, B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다. 스프링의 핵심은 코드 레벨(클래스 레벨)의 의존관계와 런타임 레벨의 오브젝트 의존 관계가 다를 수 있다는 것이다.그리고 이를..
[JPA] 영속성 컨텍스트(Persistence Context) 내부 구조 살펴보기
·
Programming/Spring,JPA
StatefulPersistenceContextPersistenceContext 인터페이스의 구현체로 이 구현은 영속성 컨텍스트가 해당 세션의 생명 주기 동안 엔티티의 상태를 유지하고 관리한다.  HashMap 구조영속성 컨텍스트의 1차 캐시는 HashMap 구조이다. 1차 캐시에 관한 그림을 살펴보면 엔티티의 식별자를 Key로 사용한다고 알려져있다.  StatefulPersistenceContext 클래스 StatefulPersistenceContext 클래스를 살펴보면, Key 값으로 EntityKey 객체를 사용하고 있다. 해당 객체 안에 식별자가 존재할것으로 추측할 수 있다.  EntityKey 클래스public final class EntityKey implements Serializable {..
BCrypt matches 동작 방식 : 매번 다른 해싱에도 일치 검증 가능한 이유
·
Programming/Java,Back-end
BCrypt로 인코딩을 해보면 같은 평문이라도 해싱 결과값이 매번 다른데,어떻게 두 문자열의 값이 같다고 판단하는 걸까?   BCrypt Encode (암호화 과정)BCrypt는 무작위로 생성되는 솔트라는 데이터를 해시 과정에서 비밀번호에 추가하여 해시 결과가 매번 달라지도록 만든다.@Overridepublic String encode(CharSequence rawPassword) { if (rawPassword == null) { throw new IllegalArgumentException("rawPassword cannot be null"); } String salt = getSalt(); return BCrypt.hashpw(rawPassword.toString(), salt);} getSalt..