전체 글

Actions lead thoughts.
· Kubernetes
Life Cycle Phase Pod의 전체 상태를 대표하는 속성 pending running succeeded failed unknown Conditions Pod가 생성되면서 실행하는 단계와 상태를 알려주는 속성 Conditions Initialized ContainerReady PodScheduled Ready Reason (status가 false일 경우) ContainersNotReady PodCompleted ContainerStatuses 컨테이너마다의 상태를 알려주는 속성 State Watinig Running Terminated Reason ContainerCreating CrashLoopBackOff Error Completed Pod status Pending PodScheduled ..
· Kubernetes
1. 직접 선택하여 할당 Node 생성 시 Label을 등록하고 Pod에 해당 node의 label을 작성 apiVersion: v1 kind: Pod metadata: name: pod-3 spec: nodeSelector: hostname: node1 containers: - name: container image: kube/something 2. 스케쥴러가 판단하여 할당 현재 node들의 남은 자원을 기준으로 판단하여 적절한 Node에 배치 node1의 잉여 메모리: 1Gi node2의 잉여 메모리: 4Gi 새로운 Pod의 필요 메모리: 2Gi → 스케쥴러가 node2에 pod를 배치함 pod 안에 있는 app에 부하가 생길 때 node의 자원을 무한정 사용하려 할 경우 해당 Node의 다른 pod..
OAuth2.0 - 생활코딩에서 이 포스트에 해당하는 강의를 볼 수 있습니다. OAuth 란? 사용자가 어떤 웹 서비스를 통해 구글 캘린더, 트위터와 같은 외부 웹 서비스 기능을 사용하고 싶을 때, 웹 서비스는 외부 웹 서비스에 사용자의 정보를 가지고 접근할 수 있어야 한다. 가장 쉬운 방법은 외부 웹 사이트에 등록된 사용자의 id, password를 갖고 접근하는 것이다. 하지만 이 방법은 보안적으로 굉장히 취약하다. 이를 해결한 방법이 OAuth 이다. 외부 웹 서비스가 accessToken을 발급하고, 우리는 OAuth를 이용해 이 accessToken을 받을 수 있다. accessToken은 다음과 같은 장점을 가진다. 해당 사이트의 id, password와 같은 정보가 없다. 꼭 필요한 기능의 ..
· Spring
ModelMapper란? "서로 다른 클래스의 값을 한번에 복사하게 도와주는 라이브러리" 어떤 Object(Source Object)에 있는 필드 값들을 자동으로 원하는 Object(Destination Object)에 Mapping시켜주는 라이브러리이다. ModelMapper 공식 문서 사용하는 이유 DTO와 같은 클래스로 데이터를 받은 후 원하는 클래스(엔티티)에 넣어줄 때, 보통 Getter와 Setter를 이용해 필드를 하나씩 복사, 붙여넣기 하는 작업을 거친다. 이때 문제가 발생한다. 매우 귀찮다. 실수할 가능성이 크다. input과 output과 repository에 저장되는 data의 모델링이 다른 경우가 많다. 즉 다른 모델의 object를 변환해줘야 하는 작업이 빈번하게 발생한다. 필드가..
· Spring
스프링 부트에서 프론트엔드를 관리하는 방법 프로젝트 내부에 패키징하지 않고 관리: 외부에서 받아오기, 트래픽 분산 CDN 프로젝트 내부에 패키징하여 관리 WebJar NPM NPM is better than WebJar: 대중적으로 많이 쓰이지 않는 라이브러리는 버전 업데이트 등 관리가 잘 되지만 대부분 라이브러리가 관리되지 않고 있다. NPM 라이브러리 관리 npm으로 라이브러리를 관리한다는 것은 package.json으로 dependencies를 관리하는 것을 말한다. npm install로 의존성을 설치한다. npm으로 라이브러리를 관리하기 위해서는 다음과 같은 단계를 거쳐 설정을 해주어야 한다. 1. 프론트엔드 라이브러리 위치 설정 2. HTML에 경로 작성 3. build.gradle plugi..
· Spring
javax.validation javax.validation 라이브러리는 위와 같은 어노테이션들을 지원해준다. 검증하고자 하는 객체의 필드에 위 어노테이션을 추가해주면 이 객체가 파라미터로 들어올 때 @Valid를 추가해줌으로써 검증할 수 있다. 또 이 파라미터 바로 뒤에, Errors errors 파라미터를 추가해주면 검증 시 발견된 에러를 가지고 올 수 있다. SignUpForm 객체가 유효하지 않다면 bindingResult.hasErrors() 메소드에서 true가 반환된다. SignUpForm이 유효하지 않다면 Responseentity에 BAD_REQUEST와 bindingResult.getAllErrors()값을 넣고 생성하여 반환된다. Spring boot 2.3 이상부터! 기존에는 org..
· Spring
과거에는 xml파일을 이용해 Java config, 즉 설정 파일을 수정했는데 스프링 프로젝트의 크기가 점점 커지고 IDE의 도움을 받을 수 없다. (오타, 자동완성) 그래서 @Configuration어노테이션을 사용해 클래스 파일을 설정파일로 사용하게 되었다. @Configuration 스프링 설정용 클래스라는 의미를 가진다. @Configuration가 붙어 있는 클래스 내부에 @Bean메소드가 있을 때, 이 메소드들을 자동으로 실행하여 반환되는 객체를 싱글톤으로 등록해준다. @Bean메소드만으로도 Bean 등록이 되지만 싱글톤을 보장하지 못한다. 그래서 @Bean메소드를 포함하는 클래스는 항상 @Configuration어노테이션을 사용해준다. 참고로 @Configuration 어노테이션 내부에도 @..
· Spring
@Bean어노테이션과 @Component어노테이션 모두 spring(IOC) container에 bean을 등록하도록 하는 어노테이션이다. 하지만 두 어노테이션의 용도가 다르다. 이 차이점을 알아보겠다. 결론 @Bean: 개발자가 작성한 메소드를 통해 반환되는 객체를 Bean으로 등록 @Component: 개발자가 직접 작성한 class를 Bean으로 등록 @Bean @Bean: 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들고 싶을 때 사용 @Bean public ObjectMapper objectMapper() { return new ObjectMapper(); } @Bean public RestTemplate restTemplate() { return new RestTempla..
· Spring
Spring에서 컨트롤러를 지정해주기 위한 어노테이션으로는 @Controller와 @RestController가 있다. @Controller는 spring 2.5버전부터 지원됐고 @RestController는 그보다 늦은 spring 4부터 지원을 시작했다. 결론부터 말하자면 @RestController = @Controller + @ResponseBody 이다. @Controller Controller - view반환 @Controller는 주로 view를 반환하기 위해 사용한다. @Controller가 view를 반환하는 과정은 다음과 같다. 1. 사용자가 URI형식으로 웹 서비스에 요청을 보낸다. 2. DispatcherServlet이 요청을 인터셉트하여 mapping되는 Handler를 찾는다. ..
· Spring
@Data 지양 @Data는 많은 어노테이션들(@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor)을 갖고 있는 어노테이션이다. 그만큼 강력하고 편리하지만 그에 비례하여 부작용도 많아 사용 시 주의를 기울여야 하는 어노테이션이다. @Setter남용 @Data에는 @Setter가 포함되어 있기 때문에 객체를 언제든 변경할 수 있는 상태가 된다. 그만큼 객체의 안정성이 보장받기 어렵게 된다. @ToString으로 인한 양방향 연관관계시 순환 참조 문제 두 엔티티가 서로 양방향 연관관계일 때 @ToString을 호출하면 무한히 순한 참조가 발생한다. 해결방법 엔티티 선언 시 @ToString(exclude="{순환참조 되는 필드}..
dongb
Now or Never