REST API URI를 결정하는 7가지 규칙 7가지 규칙은 파악하기 쉽고 필요한 모든 자원과 정보를 전달하는 충돌위험이 적은 URI를 쓸 수 있도록 해줄 것입니다. REST API URI 규칙에 대해 넘어가기 전에 우리가 다룰 URI라는 용어에 대해서 짚고 넘어가도록 하겠습니다. URI REST API는 주소자원으로 URI(Uniform Resource Identifiers)를 사용합니다. 오늘날의 웹에서 URI 디자인은 API의 리소스 모델을 명확하게 전달하는 걸작부터 사람들이 이해하기 어려운 것까지 다양합니다. 팀버너스 리는 “웹 아키텍처의 원칙”이라는 목록에 URI의 불투명성(“”식별자를 사용할 수 있는 유일한 것은 객체를 참조하는 것”)에 대해 기재하였습니다. 역 참조하지 않을 때는 다른 정보를..
모놀리식 아키텍처의 단점에 대해 공부하고 어떻게 이를 마이크로서비스로 해결한 것인가를 알아보자. 서론 최근에 마이크로서비스에 대한 많은 의견이 있습니다. 대부분의 IT회사에서는 마이크로 서비스에 대한 많은 이야기를 나누고 있습니다. 마이크로서비스는 기존 아키텍처인 모놀리식 아키텍처와 비교하면 쉽게 이해할 수 있을 것입니다. 대부분의 엔터프라이즈급 응용프로그램은 계층구조가 매우 유사한 구조를 띄게 됩니다. 1. Presentation : 유저 인터페이스 2. Business logic : 응용프로그램의 내부 로직 3. Database Access : SQL이나 NoSQL을 이용한 디비 접근. 4. Application integration : 종종 응용프로그램은 다른 응용프로그램과의 통합과정이 필요합니다...
이 질문은 오래된 질문이지만 아직까지도 자바개발을 하는 개발자들이 자주 묻는 질문입니다. 여러가지 이유가 있지만 메모리, 동기화, 자료구조에 대한 이해도에 따라 대답이 달라지기도 합니다. 주요 이유를 알아보겠습니다. 1. String Pool에 대한 필요 String Pool은 자바의 힙영역에서 특수한 저장영역입니다. String 객체가 생성되고 만약 이미 기존에 같은 String 객체가 존재한다면 참조값은 새로운 객체가 아닌 기존의 String 객체로 정해지게 됩니다. 다음의 코드는 heap영역에 하나의 String 객체만을 만들게 될 것입니다. String string1 = “abcd”; String string2 = “abcd”; 원리는 아래의 그림과 같습니다. 문자열을 변경할 수 없는 경우, 하나..
모든 자바 개발자들은 JRE(Java Runtime Environment)에 의해 자바 바이트코드가 실행된다고 알고있습니다. 하지만 많은 개발자은 JRE가 JVM(Java Virtual Machine)의 구현이라는 것은 알지 못하는 것 같습니다. JVM은 컴파일된 자바 바이트 코드를 interpret하고 분석하고 실행합니다. 개발자로서 JVM의 아키텍쳐를 아는 것은 매우 중요합니다. 개발자가 코드를 더욱 효율적으로 작성할 확률을 올려줄 것입니다. 해당 포스팅에서는 자바에서의 JVM 아키텍쳐에 대한 깊은 이해와 다른 컴포넌트들을 알아볼 것입니다. JVM 이란..? 가상머신이란 물리적 머신을 구현한 소프트웨어입니다. 자바는 애초에 WORA(Write Once Run Anywhere, 한번 쓰고 언제어디서나 ..
다음 큰 숫자 문제 설명 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 제한 사항 n은 1,000,000 이하의 자연수 입니다. 입출력 예 n result 78 83 15 23 입출력 예 설명 입출력 예#1 문제 예시와 같습니다. 입출력 예#2 15(1111)의..
Lombok - 자바 개발시 자주 사용하는 getter/setter, toString(), 생성자 등을 자동으로 생성해주는 라이브러리. - @Data, @Getter, @Setter, @ToString 등의 어노테이션 방식을 이용한다. - @Data 어노테이션은 모든 요소를 추가하는것. 즉 변수선언만 해놓고 getter/setter, toString, 생성자, equals 메소드 hashcode 등 lombok으로 생성할 수 있는 모든 메소드를 생성시킴. https://mvnrepository.com/ Maven Repository: Search/Browse/Explore Camel Async Http Client support Last Release on Oct 20, 2019 mvnrepository..
멤버변수 - 클래스 변수라고도 하며 메소드에 선언된 것이 아닌 클래스의 필드에 선언된 변수. 로컬변수 - 메소드가 실행될 때만 사용되는 변수. 메소드 내부에 선언되어 있음. 람다식에서 클래스의 멤버변수 사용 - 람다식에서 this는 내부적으로 생성되는 익명객체의 참조가 아닌 람다식을 실행한 객체의 참조이다. - 바깥 객체와 중첩 객체의 참조를 얻어 필드값을 출력하는 예제. @FunctionalInterface public interface MyFunctionalInterface { public void method(); } public class UsingThis { public int outterField = 10; class Inner{ int innerField = 20; //Inner 클래스 멤버..
함수적 인터페이스 (@FunctionalInterface) - 모든 인터페이스는 람다식의 타겟타입으로 사용할 수 없다. (= 모든 인터페이스가 람다식으로 대입될 수 없다.) - 람다식은 하나의 메소드를 구현하는 것이기 때문에 인터페이스에는 구현될 단 하나의 추상메소드만 존재해야한다. - 그러기 위해서 사용하는 방식이 함수적 인터페이스. 인터페이스에 단 하나의 추상메소드만 있어야한다. - @FunctionalInterface 어노테이션은 컴파일러가 어노테이션이 있는 인터페이스의 추상메소드 개수를 세어 2개 이상인 경우 컴파일 오류를 낸다. - 그러나 어노테이션이 없다고 함수적 인터페이스가 아니라고는 하지 않는다. 단지 개발자의 실수를 방지하기 위한 체킹용 어노테이션이다. 매개변수와 리턴값이 없는 람다식 @..