본문 바로가기

Develop167

객체지향 SOLID 원칙 - SRP, OCP, LSP, ISP, DIP 오늘은 간단하게 객체지향 SOLID 5대 원칙에 대해 정리해두려고한다. 1.SRP (Single Responsibility Principle) - 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. SRP 원칙은 클래스가 하나의 기능만을 가지며, 어떤 변화에 의해 클래스를 변경해야하는 이유는 오직하나 뿐이어야한다는 원칙이다. SRP에서는 책임자체가 분명해지기 때문에, 변경에 의한 연쇄 작용에서 자유로워 질 수가 있다. SRP를 잘 적용한다면 가독성과 유지보수가 좋아지기 때문에 실무에서 사용하기는 쉽진 않겠지만, 항상 생각하면서 프로그램을 짜면 코드의 품질은 올라갈 것이다. 예를 간단하게 보여주도록 하겠다. 아래 코드를 보자. public class Person { public static void .. 2021. 12. 25.
Spring Bean Scope 일반적으로 Spring Bean은 xml 파일에 정의 된다. Spring bean 속성에는 - class : 정규화된 자바 클래스 명 - id : bean의 고유 식별자 - scope : 객체의 범위 - constructor-arg : 생성될 때 생성자에 전달될 인수 - property : 생성될 때 setter에 전달될 인수 - init-method : 초기화 메서드 - destory-method : 소멸 메서드 오늘 이 많은 속성 중에 scope에 대해 좀 자세하게 정리해두려고 한다. 스프링의 scope는 singleton, prototype, request, session, global session 이렇게 다섯 종류가 있다. scope Description singletone 하나의 빈 정의에 대.. 2021. 11. 2.
Spring Bean LifeCycle 하이.. 오늘은 Spring Bean의 라이프 사이클을 정리해두고자한다. 보통 스프링에서는 생성자 주입을 사용하지 않으면 객체를 생성한 뒤 에 의존 관계를 주입하고, 생성자 주입을 사용하면 객체 생성과 동시에 의존관계를 주입하게 된다. 여기서 빈을 관리하는 스프링 컨테이너는 빈 초기화부터 종료까지 생명주기를 가지는데 생명주기는 아래의 흐름을 따른다. 간단하게 설명하면 과정을 쭉 설명을 해보겠다. 먼저 xml 파일, config 클래스 , 어노테이션 등으로 설정 파일을 읽어 빈 객체를 인스턴스화 한다. 그 후에 빈 프로퍼티에 의존성 주입을 하고 Aware 관련 인터페이스가 구현되어 있으면 관련 메서드들 을 호출을 한다. 다음은 객체를 생성하는 생명주기 콜백 메서드인데 @PostConstruct, Initi.. 2021. 11. 2.
[Spring] JUnit5 생명 주기 정리 Spring으로 프로젝트를 진행하다보면 단위 코드를 테스트 해야할 일이 생긴다. 이때 대부분 JUnit 기반의 테스트를 작성하게 된다. 실제 JUnit을 이용해 테스트하는 방법은 아래의 링크를 참고하면 좋을듯하다. https://devkingdom.tistory.com/114 [Spring] JUnit을 활용한 스프링 메서드 모듈 테스트하기 하이 ...!! 여러분 !! 스프링은 TDD (Test Driven Development) 기반의 개발을 할 수 있도록 스프링 프로젝트를 만들때 알아서 테스트 환경을 세팅해준다. 우리는 거기다 코드를 작성해서 테스트를 하면된 devkingdom.tistory.com 다만 작성한 글에는 @Test로만 테스트 코드를 작성했는데, 실제로 테스트가 실행될 때 우리는 이 생명.. 2021. 10. 8.
[Spring] @Transactional 정리 하이 .. 요즘 지속적으로 JPA 에 대해 공부를 하고 있는데 JPA를 SpringBoot에서 사용하면서 습관적으로 생각하지 않고 CREATE, UPDATE, DELETE API 메서드를 만들때 @Transactional 어노테이션을 사용하였다. 그러다가 문득 @Transcational에 대해서 한번 정리를 해둬야 겠다는 생각을 했따. @Transactional 어노테이션을 통해 트랜잭션을 처리하는데 먼저 트랜잭션에 대해 구체적으로 알 필요가 있다. 트랜잭션에 대해 잘 기억이 나지 않으신 분들은 아래 링크를 참고 하자. https://devkingdom.tistory.com/270 [Database] 트랜잭션이란 뭘까? 오늘은 트랜잭션에 대해 정리를 해두려한다. 트랜잭션(Transaction)이란? 트랜.. 2021. 10. 7.
이진탐색 (Binary Search) 오늘은 이진탐색 (Binary Search) 알고리즘 에 대해 정리해 두려고 한다. 이진탐색 이란? 이진 탐색은 정렬된 배열의 가운데 값과 키값을 비교하고 비교 대상을 좌우로 줄여가면서 비교를 되풀이 하는 방법이다. 아래 그림을 보면 간단하게 이해 되지 않을까 싶다. 먼저 key 값은 6 이고, 배열은 {1,4,6,8,11,13,15} 라고 가정했다. 1. 먼저 8 (mid) 과 6 (key) 을 비교 했을 때, key 값보다 mid 값이 크기때문에 8(mid) 값보다 작은 1,4,6 대상으로 범위를 줄인다. 2. 다음은 4 (mid) 와 6 (key) 을 비교 했을 때, key 값보다 mid 값이 작기 때문에 4(mid) 값보다 큰 6 을 대상으로 범위를 줄인다. 3. 다음은 6(mid) 와 6 (mi.. 2021. 10. 3.
[Spring Cloud MSA] Eureka Server에서 랜덤 port 로 서비스 여러 서비스 띄우기 지난 포스팅에서 Eureka Server 를 이용하여 Service 여러개를 띄우는 것을 포스팅 했었다. https://devkingdom.tistory.com/282 [Spring Cloud MSA] Eureka Client Service 만들어 Eureka Server 에 올리기 저번 포스팅에서 Eureka Server를 올린 적있다. https://devkingdom.tistory.com/280 [Spring Cloud MSA] Eureka Server 구동하기 오늘은 Eureka Server를 직접 구동해보려고한다. Eureka는 MSA 에서 마이크로서비.. devkingdom.tistory.com 일단 랜덤으로 port를 띄우려면 port 번호를 0으로 입력해주면 된다. 그리고 두개의 어플리케이.. 2021. 9. 17.
다중 서버 환경에서 Session 클러스터링 하기 실무에서 서비스를 한대의 서버로 운영하는 경우는 거의 없다. 보통은 동일한 기능을 제공하는 여러대의 서버를 제공하고, 서비스의 부하를 분산 시킨다. 예를 들어 내가 Was 서버 3대를 운용한다고 가정해보자. 그런데 위의 시스템은 치명적인 문제가 있다. 바로 각서버가 세션 정보를 공유하지 못한다는 것이다. 그러다보니 로그인 서비스를 통해 Session ID 가 Was 1번 서버에 생성이 되고 저장이 되어도, 다른 서비스가 1번 was가 아닌 2번이나 3번 was로 요청이 되면 session ID가 없어 500에러를 발생시킬 것이다. 이러한 문제를 해결하기위해 우리가 서버단에서 별도로 Session 관리를 해주어야한다. 오늘은 Session을 처리할 수 있는 몇가지 방법을 소개하고자 한다. 1. Sticky.. 2021. 9. 16.
[Spring Cloud MSA] Eureka Client Service 만들어 Eureka Server 에 올리기 저번 포스팅에서 Eureka Server를 올린 적있다. https://devkingdom.tistory.com/280 [Spring Cloud MSA] Eureka Server 구동하기 오늘은 Eureka Server를 직접 구동해보려고한다. Eureka는 MSA 에서 마이크로서비스들의 정보를 레지스트리에 등록할 수 있게 하고, 마이크로 서비스의 동적인 탐색과 로드밸런싱을 할 수 있게 도와주 devkingdom.tistory.com 오늘은 MSA Service를 하나 만들어 올려보려고한다. 저번에는 윈도우 환경이었는데... 오늘은 mac 환경에서 작업을 해보고자한다. 일단 프로젝트를 하나만들자. spring.start.io 에 접속해서 프로젝트를 하나 만들자. 여기서 Dependeciessms - Eu.. 2021. 9. 13.