목록전체 글 (15)
제리의 배움 기록
RESTful한 API인가? 다음 API 예제는 RESTful할까요? GET /users/1 HTTP/1.1 Host: api.example.com “REST는 자원 중심적인 요청과 응답” 관점에서 보면, 위의 요청은 서버에서 관리하는 자원 중 첫번째 유저에 대한 요청을 보내고 있으니 RESTful API로 보일 수 있습니다. 하지만, RESTful을 조금 더 명확하게 살펴보면 위의 문제는 RESTful 하다고 하기에는 정보가 부족합니다. REST(Representational State Transfer)란? REST는 통신 프로토콜이 아닙니다. REST는 소프트웨어 아키텍처의 한 형식으로 다음과 같은 제한 조건을 가지고 있습니다. 이 제한 조건을 준수하는 시스템을 RESTful 하다고 말합니다. RES..
로깅 프레임워크 : log4j, logback, log4j2 자바를 이용한 웹서비스 개발시 사용자의 다양한 이벤트 정보를 로깅하게 됩니다. 로깅 프레임워크는 이러한 로깅을 패턴화하고 간편하게 할 수 있도록 지원합니다. 자바 진영에는 slf4j(Simple Logging Facade For Java)라는 추상화된 로깅 프레임워크가 있습니다. 그리고 slf4j를 구체화한 구현체에는 대표적으로 log4j, logback, log4j2 등이 있습니다. 출시 순서 : log4j(2015년 지원 만료) -> logback -> log4j2 Spring Boot에서는 spring-boot-starter에서 기본으로 slf4j와 logback 구현체를 의존하고 있습니다. 별도로 log4j2 구현체로 변경하지 않아서 l..
프로세스와 스레드 프로세스는 프로그램이 실행된 상태를 의미 합니다. 스레드는 프로세스보다 작은 최소 실행 단위입니다. 모든 프로세스는 최소 하나의 실행단위 스레드를 가집니다. JVM에서의 스레드와 메모리 구성 컴파일된 자바 애플리케이션을(프로그램)을 실행하면 새로운 JVM 프로세스가 시작되고 main thread가 생성됩니다. 이 main thread를 통해 코드가 실행되고, 다른 thread들이 생성될 수 있습니다. JVM은 프로세스를 실행하면서 OS로부터 Runtime Data Area 메모리를 할당받습니다. Method Area 클래스 정보, 정적 변수 등 JVM 프로세스가 시작될 때 데이터가 할당 Heap 동적으로 데이터가 할당되는 영역 레퍼런스 타입 객체 생성시에 실제 객체가 올라가는 메모리 영..
[JAVA] 프로세스와 스레드 - JVM 메모리 관점에서 분석 프로세스와 스레드 프로세스는 프로그램이 실행된 상태를 의미 합니다. 스레드는 프로세스보다 작은 최소 실행 단위입니다. 모든 프로세스는 최소 하나의 실행단위 스레드를 가집니다. JVM에서 jerry92k.tistory.com LifeCycle 관점에서 멀티프로세싱과 멀티스레딩 비교 멀티 프로세싱 특징 하나의 프로세스에서 다른 프로세스로 전환됩니다. 프로세스가 점유하고 있던 CPU regiter, RAM, cache 등이 반환되고 다른 프로세스의 데이터로 전환되어 오버헤드가 큽니다. Process LifeCycle 흐름 New (Create) 2차 메모리(디스크와 같은 장기기억 저장소)에 있는 프로그램이 OS에 의해 선택되어 프로세스가 되는 단계..
최근에 요소수 정보를 제공하기 위한 요소수소문 서비스를 만들어 운영중입니다. 프론트는 부트스트랩 템플릿 + 타임리프 조합으로 간단하게 구현하였는데요, 개발자 지인이 학습겸 서비스의 프론트를 React로 개발해보겠다고 제안해주었습니다.(^ㅇ^) 프로젝트(yssmap)가 깃허브에 public으로 오픈되어 있어서 소스는 바로 내려받아 사용할 수 있었고 Spring Boot와 Gradle의 마법으로 개발환경을 구성하는 것은 어렵지 않은데요, 설정파일은 어떻게 효율적으로 공유할지 작은 고민(?)이 있었습니다. 이 고민을 private repository를 이용하여 해결한 것을 공유하고자 합니다. 형상관리 툴로 git을 사용하였고, remote repository는 github를 기준으로 작성하였습니다. 설정파일?..
Slf4j를 사용하여 로깅할 때 아래와 같이 세가지 방법을 사용할 수 있습니다. Logger logger = LoggerFactory.getLogger(this.getClass()); String message1= "5"; String message2= "20"; logger.info("3 + 2 ="+message1+", "+message1+" + 15 = "+message2); // (1) logger.info(String.format("3 + 2 =%s, %s + 15 = %s",message1,message1,message2)); // (2) logger.info("3 + 2 ={}, {} + 15 = {}",message1,message1,message2); //(3) slf4j에서는 로그레벨 ..
지난 포스팅에서는 if와 switch의 실제 동작 차이를 비교해보며 switch가 LOOKUPSWITCH 로 변경되는것을 확인해보았습니다. if, switch 누가 더 빠를까? 하지만 실제로는 자바 컴파일러가 상황에 따라 TABLESWITCH, LOOKUPSWITCH 둘 중 효율적이라 생각하는 방식으로 switch의 컴파일을 사용합니다. TABLESWITCH tableswitch는 switch의 조건 값의 범위를 인덱싱하여 jump table을 구성하고, 해당하는 인덱스의 실행지점으로 바로 점프합니다. [예제 자바코드] int chooseNear(int i) { switch (i) { case 0: return 0; case 1: return 1; case 2: return 2; default: retu..
JDK에서는 개발 및 운영을 위해 기본 툴을 제공합니다. Java 홈디렉토리의 bin에 툴이 포함되어있습니다. 1.java home path 찾기 root@ureasolution:~# echo $JAVA_HOME /usr/lib/jvm/java-1.11.0-openjdk-amd64 2.Java 홈디렉토리의 bin 경로로 이동 root@ureasolution:~# cd /usr/lib/jvm/java-1.11.0-openjdk-amd64 root@ureasolution:/usr/lib/jvm/java-1.11.0-openjdk-amd64# cd bin 3.bin 안의 도구들 확인 (JDK 11 기준) root@ureasolution:/usr/lib/jvm/java-1.11.0-openjdk-amd64/bi..