본문 바로가기

IT/JAVA

(14)
자바 트러블슈팅 - (1. 자바 기반의 시스템에서 발생할 수 있는 문제들) https://www.yes24.com/Product/Goods/84937877 자바 트러블슈팅 - YES24 건강한 서비스를 위한 scouter 활용법은 물론,그 밖의 시스템 장애 극복을 위한 다양한 도구 사용법을 배운다!기술이 아무리 발전하고 뛰어난 개발자가 있더라도 사람이 만든 프로그램은 언제든 www.yes24.com 자바 기반의 시스템에서 발생할 수 있는 문제들 서비스나 시스템 장애가 발생하면 대부분은 서버의 로그를 보거나 서버의 리소스 사용량을 보고 짐작 경험이 풍부 -> 데이터를 기반으로 문제의 원인을 쉽게 찾아냄 경험이 없음 -> 중요 데이터를 수집하지 않고 서버를 재시작 하는 경우가 있음 어떤 문제가 발생할 수 있을까? 시스템이 느려짐 시스템 응답이 없음 예외 발생 시스템 죽음 시스템이 ..
스프링 빈 생명주기 메서드와 실행 순서 스프링 빈 생명주기 메서드와 실행 순서 스프링 빈(Bean) 생명주기를 담당하는 메소드들을 알아보자 초기화 메소드 빈이 생성 되고 의존성 주입까지 완료된 후에 실행하는 초기화 메서드 @PostConstruct ```java import javax.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @Slf4j @Component public class TempBean { @PostConstruct public void postConstruct(){ log.info("@PostConstruct !!!!!!!!"); } } ``` 메서드 선언부에 @PostConstr..
ThreadLocal에 대해서 알아보자 - 1 자바 ThreadLocal 클래스를 사용하면 동일한 Thread에서만 접근할 수 있는 변수를 만들 수 있다. 따라서 두 Thread가 동일한 코드를 실행하고 ThreadLocal 변수에 접근을 해도 서로의 ThreadLocal 변수를 볼 수 없다. ThreadLocal 생성 자바 객체를 만드는 것과 같이 new 연산자를 통해서 ThreadLocal을 생성 private ThreadLocal threadLocal = new ThreadLocal(); 해당 작업은 Thread 당 한 버만 수행하면 된다. 각 Thread에는 자체 설정된 ThreadLocal 값만 표시 ThreadLocal 값 사용 Thread 로컬에 저장된 값은 get() 메서드를 통해 사용할 수 있다. String threadLocalVa..
Java Garbage Collection Java Garbage Collection NAVER D2 1. 가비지 컬렉션 과정 - Generational Garbage Collection 1.1. 'stop-the-world' GC를 실행하기 위해 JV 이 어플리케이션 실행을 멈추는 것 GC를 수행하는 쓰레드를 제외한 모든 쓰레드는 작업을 멈춤 GC튜닝이란 stop-the-world 를 줄이는 것이다. 1.2. 명시적 해제 명시적으로 해제하려고 null을 할당하거나 System.gc()를 호출하는 경우도 있음 → System.gc()는 성능에 매우 큰 영향을 끼친다.(아마도 gc를 하면 stw 가 발생하여서 그런 것 같다.) 1.3. 두 가지 가설에 기반한 가비지 컬렉션 대부분의 객체는 금방 접근 불가능 상태가 된다. 왜??? 왜 이런 가설이? ..
Java HashMap은 어떻게 동작하는가? Java HashMap은 어떻게 동작하는가?(NAVER D2) NAVER D2 해시맵과 테이블은 기능은 동일하다 다만 보조해시 함수를 사용하는 해시맵이 충돌이 덜 발생할 수 있어 상대적으로 성능상 이슈가 있다. 해시 테이블은 거의 변화가 없지만 해시 맵은 버전을 거치면서 변화가 많다 어떤 변화? // 해시맵의 선언부 public class java/util/HashMap extends java/util/AbstractMap implements java/util/Map java/lang/Cloneable java/io/Serializable { // 해시 테이블의 선언부 public class java/util/Hashtable extends java/util/Dictionary implements jav..
Filter 를 활용한 ACL 만들기 (feat. Spring) 1. 개요 업무를 하던중 컨트롤러 레이어에서 허용된 IP 를 체크하는 로직이 상당수 중복코드로 남아 있는것을 발견함 IP 체크를 통해 허용된 IP가 아니라면 Exception 을 던지고 있었음 허용되지 않은 IP가 접근하는것을 Exception이 아닌 403(forbidden)응답 또는 은닉화를 위해 404(Not Found) 응답을 돌려줘야 된다고 생각함 2. Before 2.1. Code 2.1.1. Controller @RequestMapping(value = "/api/test") public Map apiTest() { // 중복코드 if (!ipInfoService.checkAllowIps()) { throw new RuntimeException( "[" + appProjectName + " ..
Spring Boot Resource 사용시 접두사(classpath, file 등)를 사용해야 하는 이유 결론부터 말하자면 특정 Resource 타입을 사용하도록 강제해야 한다면 접두사를 사용해야 한다. Resource는 java.net.URI를 추상화한 것이다. Resource를 구현한 구현체는 아래와 같이 많이 존재한다. 이러한 리소스 타입은 Resource.getResource(String location) 메서드에 location 문자열과 ApplicationContext 타입에 의해 결정이 된다. ApplicationContext를 구현한 ServletWebServerApplicationContext 상황일 때 Resource 타입은 ServletContextResource 타입이 된다. 문제는 SpringBoot 사용 시 context path에서 발생한다. ServletContextResourc..
@Autowired 필드주입 Spring 없이 mock 생성하여 테스트하기 테스트중 아래와 같은 Service 가 있을수 있다. @Service public class AService{ @Autowired BRepository bRepository; @Autowired CRepository cRepository; . . . @Autowired ZRepository zRepository; } 이 경우에 보통 Spring 을 구동하여 mock bean을 등록하여 테스트를 진행한다. 하지만 시간도 오래 걸리고 그렇기 때문에 리플렉션을 통해 mock bean을 생성하여 사용할 수 있다. import static org.mockito.Mockito.*; @Test public void ATest(){ AService aService = new AService(); BRepository ..
스택 계산기-(후위연산식을 통해 계산기를 만들어 보자!) 보호되어 있는 글입니다.
후위연산식을 이용한 스택 계산기-(중위에서 후위 변경 step.1) 보호되어 있는 글입니다.