본문 바로가기

전체 글

(49)
[Spring] application-{환경}.yml 과 @Value @Value Value 어노테이션은 .yml 파일이나 .properties 파일에 설정한 내용을 주입시켜주는 어노테이션입니다. 깃허브에 코드를 올리다보면 민감한 정보들까지 올려야되는 상황이 있는데요. 그럴때 사용할 수 있습니다. RDB 엔드 포인트, OAuth client_secret과 같은 보안에 예민한 정보들을 yml 파일에 담을 수 있습니다. 위에 보이시는 그림과 같이 application-{환경}.yml 형식으로 만들어 사용하시면됩니다. 이때 보안의 목적을 위해 application-{환경}.yml 형식으로 만들었다면 .gitignore에 다음과 같이 파일명을 적어주셔야합니다. 위와 같이 마쳤다면 application-{환경}.yml 이 어두운 노란색으로 변했을겁니다. @PropertySource..
[Network] DMZ 존 DMZ DMZ 는 DeMilitarized Zone 의 약자로 흔히 알고있는 비무장지대를 네트워크 개념으로 끌고온것입니다. 그럼 무엇과 무엇의 사이에 존재하는 비무장지대인지가 궁금하죠 아래의 그림처엄 내부 네트워크와 외부 네트워크의 비무장지대입니다. 여기서 내부 네크워크란 사내망같이 외부망과는 연결되있지 않고, 조직의 구성원만이 접근가능한 망을 이야기합니다. 외부 네트워크는 흔히들 사용하는 인터넷에 연결된 망입니다. DMZ의 특징 외부 네트워크와 내부 네트워크 사이에서 외부 네트워크의 서비스를 제공하며 내부 네트워크를 보호합니다. DMZ에서 내부 네트워크의 접속은 허용하지않습니다. 이유는 DMZ 내의 침입이나 해킹으로 인해 내부 네트워크까지 위험한 상황을 방지하기 위함입니다. 예를들어 외부 네트워크와의 ..
[Spring] 단위 테스트 단위 테스트 프로그램의 작은 단위의 테스트를 진행하는 것을 의미합니다. 작은 단위의 기준은 정해져있지 않지만 보통은 메서드 단위의 테스트를 진행합니다. FIRST 좋은 단위 테스트라고하면 무조건 따라오는 5가지 특징이 있습니다. Fast : 단위 테스트는 빨라야합니다. 단위테스트의 목적이 빠르게 피드백주는데 있기 때문입니다. Isoated : 단위 테스트는 독립적이어야합니다. 말 그대로 "단위" 에 집중하는 것이기 때문에 다른 계층의 영향을 받으면 안됩니다. Repeatable : 단위 테스트의 결과는 항상 같아야합니다. DB 초기값이 변하거나 시간의 유동성에 따라 다른 결과를 낸다면 그때마다 다른 테스트 코드를 작성해야합니다. 따라서 결과가 항상 같게 코드를 구성해야합니다. Self-validating..
[Java] Wrapper Wrapper 자바에는 크게 2가지 자료형으로 구분할 수 있습니다. 기본 타입인 Primitive Type 과 참조 타입인 Reference Type 입니다. 여기서 기본타입은 int, double, float, boolean등이 있는데 이를 객체로 표현화한 것을 Wrapper 클래스 라고합니다. Primitive Class Wrapper class byte Byte char Character int Integer float Float double Double boolean Boolean long Long short Short Wrapper 클래스의 종류는 위와같이 존재하고 Primitive Type에서 Wrapper Type으로 만드는 과정을 Boxing, Wrapper Type에서 Primitive ..
[Java] Optional NullPointerException(NPE) 자바 개발자들은 한번씩 본 Exception 일겁니다. null 객체에서 메서드를 호출하거나 객체필드에 접근하거나 throw 하는 등의 상황에서 발생합니다. 보통 해당 Exception은 사용 전 if 문을 통해 null인지 검사 한번 하게되면 해결할 수 있는 문제인데요. 하지만 매번 if 문을 통해 확인을 해야하기 때문에 가독성이 좋지않아 Java8 부터는 Optional 을 지원해줍니다. Optional Optional 은 null이 올 수 있는 값을 감싸는 Wrapper 클래스로 참조하더라도 NPE가 발생하지 않습니다. 또한 위와같이 value 라는 변수에 값을 저장하기 때문에 값이 null이더라도 NPE가 발생하지 않습니다. 초기화 Optional 클..
[Java] 메모리 영역과 Garbage Collection Garbage Collection 대표적인 자바의 메모리 관리 방법 중 하나로 Heap 영역에서 동적 할당된 메모리 중 필요없게 된 메모리를 모아 주기적으로 제거하는 프로세스입니다. 메모리 영역 앞서 GC가 Heap 영역을 관리한다 했는데 그 영역이 무엇일까요? 자바 프로그램이 실행되면 JVM이 OS로 부터 메모리를 할당받고, 할당받은 메모리 영역을 여러영역으로 나누어 관리합니다. 메모리 영역에는 정적인 영역과 동적인영역 둘로 나눌 수 있습니다. 정적인 영역 Method 영역 또는 Static 영역이라고 불리우는 영역이 있습니다. 1. JVM이 동작해서 클래스가 로딩될 때 생성됩니다. 그리고 해당 영역의 데이터는 프로그램 시작부터 종료까지 메모리에 남아있습니다. 2. 읽어들인 클래스와 인터페이스에 대한 ..
[Java] JRE, JDK, JVM Java Compile 1. 개발자가 .java 라는 파일을 생성합니다. 2. java의 컴파일러가 .class 라는 바이트 코드를 생성하게됩니다. 아직은 컴퓨터가 이해할 수 없는 파일입니다. 3. 이를 Class Loader 를 이용해 JVM 메모리 내로 로드합니다. 4. JVM은 이를 각 운영체제에 맞는 기계어로 번역하여 동작을 진행합니다. JRE 자바로 짠 소프트웨어가 있다고 가정할게요. 이 소프트웨어가 컴파일 및 빌드까지 다 마치고 실행될 때의 환경요소로써 필요한 것들을 모아둔 곳이에요. JRE가 JVM의 실행환경을 구현했다고도 이야기해요. 예를들어 자바의 List, Map, Set 같은 자료구조들을 바이트로 된 클래스로 제공해주는 것이에요. JDK JDK는 JRE를 포함해서 가지고 있기 때문에 ..
[Spring] Bean Bean Spring 에서는 Spring Container에 객체들을 저장하여 객체끼리의 의존성을 주입해주는 역할을 합니다. 이때 Spring Container에 등록되는 객체들을 Bean이라고 합니다. 특징 @Configuration이 선언된 클래스의 메소드에서 사용가능합니다. 메소드의 반환객체가 스프링 Bean 객체임을 선언하는 작업입니다. Bean의 이름은 기본적으로 메소드 이름이고, 원한다면 바꿀 수 있습니다. Bean을 등록하는 방법 @Component Spring Boot에서는 클래스 선언부 위에 @Component를 선언하면 Bean으로 등록해줍니다. 자주 사용하는 @Controller, @Service, @Repository는 모두 @Component를 포함하고 있습니다. 직접 등록 Bea..