무상태(stateless)로 설계해야 한다! 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야 한다. 필드 대신에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야한다. 왜? 싱글톤 객체는 단일 객체다(유일함) 이 객체가 내부에 변수를 가지고있고 쓰기를 허용한다면, 여기저기서 이 값을 막 바꾸게 된다. 내가 원하는 시점에 싱글톤 객체를 사용했는데 이 타이밍에 다른 녀석들이 똑같이 싱글톤 객체를 사용한다면 원하는 값이 나오지 않을 가능성이 높아진다.
java 프로세스 메모리가 계속 증가한다..! 메모리 누수일까? CentOS7에 java 프로세스를 가동시키고 해당 java service가 제공하는 api를 계속 호출했더니 메모리가 야금야금 증가해서 증가한 메모리를 유지하는 현상을 발견했습니다 과연 이게 메모리 누수인지 아니면 다른 이유인지 확인해 보겠습니다. Java Service 실행 환경 api version : 2.3.1 os : CentOS Linux release 7.7.1908 (Core) jdk : openjdk "14.0.1" java options : -server -Xms2g -Xmx2g -Xss256k -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8Ja..
추상화 된 빈 설정 메타 정보 BeanDefinition(빈 정의) 스프링 XML, JAVA 코드, Groovy 등의 다양한 설정 형식을 지원합니다. 이렇게 다양한 설정을 지원할 수 있는 이유는 "BeanDefinition" 이라는 추상화가 있기에 가능합니다. XML을 읽어서 -> BeanDefinition 자바 코드를 읽어서 -> BeanDefinition Groovy 코드를 읽어서 -> BeanDefinition 스프링 컨테이너는 JAVA 코드인지, XML인지 몰라도 됩니다, 오직 BeanDefintion 만 알면 됩니다. 스프링 컨테이너는 이 BeanDefintion 즉 빈 설정 메타정보를 기반으로 스프링 빈을 생성합니다.
java로 elasticsearch를 사용하는 중 쿼리 만들기가 너무 빡세(?) 룸북의 @Getter @Setter 어노테이션과 같이 컴파일 타임에서 자동으로 쿼리를 만들어주는 라이브러리를 만들어보려고 조사하다보니 AST라는 생소한 단어를 접하게되어 이것이 무엇인지 찾아 보았습니다. 추상 구문 트리(abstract syntax tree) 추상 구문 트리(abstract syntax tree) 줄여서 AST 라고 쉽게 부르며, java에서만 볼 수 있는 용어가 아닌 컴파일러가 필요한 프로그래밍 언어라면 들을 수 있는 용어입니다 컴파일러와의 관계 컴파일러가 필요한 언어에서 AST를 접할 수 있는 이유는 AST가 컴파일 단계 중 구문 분석(syntax analyzing) 단계의 결과물이기 때문입니다. 컴파일 ..
토비의 Spring을 정독하고 싶었습니다만.. 업무가 바빠지며 출퇴근 시간 말고는 자유의 몸이 아니게되어 인프런을 통하여 김영한님의 강의를 구독하였습니다. 선물받은 레노버p11과 함께 출퇴근 시간을 적극 활용하여 완강을 목표합니다. 좋은 객체 지향 프로그래밍? 객체 지향 프로그래밍은 코드를 유연하고, 변경이 용이하게 만들어야 합니다. 쉽게 말해 아래와 같이 코드를 작성해야한다는 것 입니다. 레고 블럭을 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 객체 지향의 특징 객체 지향의 큰 특징은 아래와 같이 네가지가 존재합니다. 추상화 캡슐화 상속 다형성 이중 객체 지향의 꽃이라 할 수 있는 다형성에 대하여 살펴보겠습니다. 다형성 다..
회사에 요청하여 구매한 토비의 Spring 3.1 책을 드디어 읽게되었습니다. Note에 공부 내용을 정리하고 이를 언제든지 꺼내볼 수 있도록 블로그에 옮겨 적습니다. 0 장 : 들어가며.. 애플리케이션의 기본틀 스프링 컨테이너 스링 컨테이너는 스프링 런타임 엔진이며, 설정 정보를 참고해서 Application 을 구성하는 오브젝트를 생성하고 관리한다. 공통 프로그래밍 모델 IoC/DI IoC/DI는 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델, 스프링이 직접 제공하는 모든 기술과 API, 심지어 컨테이너도 IoC/DI 방식으로 작성되어 있다. 스프링을 바르게 이해하고 효율적으로 사용하는데 기본이되는 가장 중요한 기술! 서비스 추상화 구체적인 기술과 환경에 종속되지 않도록 유연한 추상계층을 두는..
안녕하세요? 이번 포스팅은 제가 Spring Boot Project 진행 시 필수적으로 셋팅하는 몇가지들을 소개드리고자합니다. 1. 버전 자동화 (feat.시멘틱 버저닝) 프로젝트의 버전관리는 굉장히 중요한 요소중 하나입니다 이 소프트웨어가 어떠한 동작을 하는지, 과거의 버전과 무엇이 달라졌는지, 과거에 제공하던 기능을 아직도 제공하는지 아니면 이제는 제공을 안하는지 등이 구분되어야 합니다. 이러한 구분을 버저닝을 통하여 규칙성있게 관리할 수 있습니다. 방법 이전에 올렸던 게시글의 링크로 대체합니다 링크 : https://shinwusub.tistory.com/138?category=404917 2. REST API 문서 자동화 (feat.Swagger) 대부분의 Spring Boot 프로젝트는 Fron..
윈도우에서 gradle 프로젝트를 commit하고 push한 다음 해당 프로젝트를 리눅스 환경에서 pull하여 빌드하려할 때 gradlew 에 대한 권한이 없는 경우가 존재하여 해결법을 기록합니다. 해결법 commit하는 윈도우PC에서 해당 프로젝트의 root 디렉토리로 이동 후 아래와 같은 터미널 명령어를 실행해 줍니다. git update-index --chmod=+x gradlew 이후에 commit, push를 진행 후 다시 리눅스에서 pull하여 빌드를 진행하면 정상적으로 진행이 됩니다.
- Total
- Today
- Yesterday
- C
- UE4
- LambdaFunction
- Trouble shooting
- c++11
- UE5
- bug
- Lambda
- 람다함수
- 람다
- c++
- double free
- unrealengine
- rotator
- coordinate system
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |