무상태(stateless)로 설계해야 한다! 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야 한다. 필드 대신에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야한다. 왜? 싱글톤 객체는 단일 객체다(유일함) 이 객체가 내부에 변수를 가지고있고 쓰기를 허용한다면, 여기저기서 이 값을 막 바꾸게 된다. 내가 원하는 시점에 싱글톤 객체를 사용했는데 이 타이밍에 다른 녀석들이 똑같이 싱글톤 객체를 사용한다면 원하는 값이 나오지 않을 가능성이 높아진다.
추상화 된 빈 설정 메타 정보 BeanDefinition(빈 정의) 스프링 XML, JAVA 코드, Groovy 등의 다양한 설정 형식을 지원합니다. 이렇게 다양한 설정을 지원할 수 있는 이유는 "BeanDefinition" 이라는 추상화가 있기에 가능합니다. XML을 읽어서 -> BeanDefinition 자바 코드를 읽어서 -> BeanDefinition Groovy 코드를 읽어서 -> BeanDefinition 스프링 컨테이너는 JAVA 코드인지, XML인지 몰라도 됩니다, 오직 BeanDefintion 만 알면 됩니다. 스프링 컨테이너는 이 BeanDefintion 즉 빈 설정 메타정보를 기반으로 스프링 빈을 생성합니다.
토비의 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하여 빌드를 진행하면 정상적으로 진행이 됩니다.
Spring Boot Gradle 프로젝트를 진행하면서 시맨틱 버전을 적용할 경우가 있어서 이에 대한 기록을 남깁니다. 시맨틱 버저닝이란?(Semantic Versioning) 시맨틱 버저닝은 1.0.0-alpha+test // major.minor.patch-prerelease+buildMetaData와 같은 구조를 띄는 버전 기법을 말합니다. 좀 더 자세한 정보는 https://velog.io/@iamjoo/Semantic-Versioning%EC%9D%B4%EB%9E%80 를 참고 부탁드리겠습니다. Gradle을 이용한 시맨틱 버저닝 적용 우리의 Gradle을 Groovy 라는 프로그래밍 언어를 이용하여 마치 코딩을 하듯이 조작할 수 있습니다. 이것이 maven과의 큰 차이점이라 볼 수 있을 것 같..
Spring Boot 프로젝트 중 하나의 log파일에 info,warn,error 들이 모두 표시되어 한눈에 보기가 쉽지 않았기에 log level 별로 별도의 파일로 분리하는 방법을 기록합니다. 참고 Logback 전반적인 설명이 너무 잘 된 포스팅을 발견하여 Logback 사용에 대한 내용은 아래 링크를 참고바랍니다. https://goddaehee.tistory.com/206 logback-spring.xml 파일 생성 info ACCEPT DENY ${LOG_PATTERN} logs/trace/current.log trace ACCEPT DENY ${LOG_PATTERN} logs/trace/trace.%d{yyyy-MM-dd}_%i.gz 200MB 30 logs/debug/current.log ..
- Total
- Today
- Yesterday
- c++11
- unrealengine
- C
- 람다함수
- LambdaFunction
- double free
- c++
- Lambda
- coordinate system
- bug
- UE5
- 람다
- rotator
- Trouble shooting
- UE4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |