본문 바로가기

분류 전체보기202

스프링과 스프링 부트의 차이/ 스프링만 사용했을때의 불편함. 가장먼저, SPRING과 SPRING BOOT의 차이를 알고 가자 . 스프링(Spring)은 프레임워크이며, 스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 도구입니다. 스프링은 설정 파일을 작성해야 하지만, 스프링 부트는 자동 설정을 제공하여 간편하게 개발할 수 있습니다. 또한, 스프링 부트는 내장 서버를 제공하여 쉽게 웹 애플리케이션을 실행할 수 있습니다. Spring은 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우에, Spring Boot는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용됩니다. -SPRING 사이트 참고. 사실 BOOT를 기본적으로 사용해왔기 때문에, 추가적인 개념을 공부하는 위주로 공부에 임하자. ++전자정부 프레임워크가 스프링 기.. 2023. 12. 30.
완성한 개발자 저장 프로젝트를 통해 핵심 복습 핵심 내용을 복습해보겠다. 프로젝트 -> 클론프로젝트 -> 개발자 프로젝트에 있는 내용을 기반으로 복습을 진행하겠다. 1. DI, IOC 의존성 주입. Controller에서, dmakerservice를 사용하겠다. 원래는 당연히 이런 꼴의 생성자 모습이 되어야 한다. 이러한 생성자의 실행이 ioc, 여기에 dmakeservice를 넣어주는것이 DI가 된다. 모든 빈을 다 가지고 있다가, DI를 컨트롤 해주는 것이 application context. 이 application context가 진행해주기 때문에, 별도의 생성자 생성이 필요없다. 2. AOP 일정 부분에서 일정 point에서 저장해주고, 문제가 생기면 exception을 발생시키고, 이러한 것들을 @Transactioanl을 통해서 수행된다.. 2023. 12. 30.
리팩토링 서비스가 확장되고 , 축소되고, 언어변경되고 , 모바일 지원요청받고 이렇게 여러가지 리팩토링이 필요하다 . 프로젝트의 변화의 복잡성을 감소 시켜준다 주로 품질 떨어진부분,복잡부분, 핵심서비스,향후 변경가능성 부분, 도전적인 부분에 적용하면 좋다. 1. REQUEST에서 PATHVARIABLE의 변수에는 FINAL 달아주기 2. service의 get method에, readonly = true로 하여 값이 변경되지 않게. 3. request앞에 @Nonnull 4. 중복기능 메소드 통합 즉, 코딩을 하다보니 이게 지금 접근이 가능하게 할까(private public) or final 들의 문제가 있었는데, 해당 문제들은 모두 코딩을 진행한 이후에 팀원의 합의 후, 변경하는 구조라는 것을 깨달았다. 2023. 12. 30.
테스트 테스트를 잘하는 방법 예전에는.. 테스트를 직접 하나씩 클릭하고 레코딩해서 팀이 테스트만 하였다 . (진짜 어려웠겠다는 생각을 했다.. 사실 테스트라는게 스스로 테스트 case를 생각하기 떄문에.. 어려운 부분이 많았다. 이런걸 하나하나씩 다 했다는게 진짜 대단하다 ) 다 짰는데 , 그다음에 기획이 바뀌고 코드가 다시 바뀌는 경우가 굉장히 많다. 코딩 -> 리팩터링 -> 테스트 -> 개선의 반복이다. CLASS, METHOD가 SRP를 잘 지켜야 한다. SRP? 단일 책임 원칙으로써, 하나의 객체는 하나의 책임(기능)을 담당해야한다. ENTITY에 사람정보 말고 갑자기 다른 기능이 있거나, 이래선 안된다. 이럴때가 TEST를 사용하기에 굉장히 유리한 상황이다! (또한, 그 크기가 너무 크지 않을때가 테스.. 2023. 12. 29.
예외 처리 이전에는 , 모든 exception에 대해서 try and catch를 진행했다. 모든 메소드를 거의 boolean으로 진행해서, try /catch or if절로 검사하여 return false방식으로 진행했다. ->해당 방식 문제. EXCEPTION을 별도로 생성해야 하는 문제가 발생한다. + 실패와 성공 각각을 DTO에 담아야 하는 , 복잡하고 이상한 형태의 구조가 동작된다. DTO에는 정보에 대한 것 뿐만 있어야하고, 예외등의 문제 관련하여는 존재해서는 안된다. -> 대부분을 VOID로 단순화하여, 예외를 생성하는 METHOD를 별개로 만든다. 코드의 간략화 , DTO의 간략화 예외만을 확인 예외를 던질지 말지를 실제 메소드에서 확인하고 넘어간다 (비지니스 VALIDATION) 이제 던져진 예외에.. 2023. 12. 29.
스프링. 상세히 데이터 관리및 조회 spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true 둘을 모두 properties에 추가해주어야, 사용이 가능 (baeldung가 보기 편한 것 같다) 1. sql쿼리를 출력하고 2. sql 형식을 읽기 쉽게 포멧한다. 현재 있는 DEVELOPERS를 가져오는 것을 만들어 보자. 실제 객체 Developers에 직접 접근은 지양해야한다. Dto를 새로 생성하는 것이 유리하다. 유연성, 안전성 필요한 정보만 들어있는, developer dto (from entity는 entity부터 생성되었다는 뜻! ) GET METHOD 사용시, 잘 확인됨이 보인다. 이번엔 한개를 따로 상세히 id를 입력받고, 해당 정보를 return하자. .. 2023. 12. 28.
EXCEPTION 모든 생성 EXCEPTION의 부모는 EXCPETION임을 기억하고 . 서비스 단에서 실제 DB를 저장하기 전에, REQUEST를 받아서 이를 DEVELOPER 객체에 넣기도 전에, DATA VALIDATION을 수행한다. 이때 단순한 EXCEPTION 만으로는 검증될 수 없기 때문에, 사용자 설정 EXCEPTION을 생성한다. 해당 예시. 물론, DMakerException을 객체로 따로 만들어주어 이를 준비해야한다. RuntimeException을 상속받는 exception. ERRORCODE객체와 MESSAGE를 내부 변수로 가지고 있으며, ERRORCDE를 받아 해당 ERRORCDE가 CODE만 있을때는 그 ERRORCODE와 기본 MESSAGE를. 그렇지 않을땐 모두를 대입한다. SUPER는 E.. 2023. 12. 28.
Validation 앞서, validation을 진행했던 기억이 있다 . (원하는 데이터 혹은 정보가 잘못된것이 없는지 확인하는 것) @Valid! 들어온 값들은 requestbody에 넣는데, 이때 제약했던 @NotNull이나 기타 등등 제약들을 맞는지 확인해준다. 이러한 과정을 data validation이라고 한다. 이제, 조금더 복잡한 (특정 요구사항에 따른) BUISNESS VALIDATION을 사용해보자 . 이와 같이, 특정 EXCEPTION을 활용하고 생성하여 BUSINESS VALIDATION을 진행할 수 있다. 해당 EXCEPTION 생성은 추후 EXCEPTION 부에서 다시 설명하겠다. ++ 자바 8부터 추가된 기능인 ifPresent((developer -> { throw new DMakerExcepti.. 2023. 12. 28.
Transaction, Transactional @Transactional 이때 @Transactional이 왜 필요할까? 일단 예시부터. 은행에서 만원을 뺐는데, 상대방은 만원을 못받는 경우가 있을까? 없다. 이를 기본으로 트랜잭션의 성질을 보자 1. Atomic(원자성) 돈을 빼는것과, 돈을 받는 작업이 한개의 트랜젝션으로 묶여서! 두 작업이 모두 성공하거나 모두 실패해서 빼긴 성공해씅나 받을때 에러가 나면, rollback 된다. 2.일관성(COnsistency) db저장된 파일은, 일정 규약을 따라야한다. 트랜젝션이 끝나는 점에서는 이러한 일관성이 맞춰저 있어야하고, commit이 끝나는 지점에서는 맞춰져 있어야한다. 예시로, 잔고는 0원 이상인데, 중간엔 0보다 적을수있지만 commit이 끝날때는 반드시 0보다 커야한다. 3. 고립성(isol.. 2023. 12. 28.
쓰레드, 프로세스 프로그램은 실행 가능한 파일을 의미하고? 프로세스는 실행중인 프로그램을 의미한다. 프로세스는 자원(resource)와 쓰레드로 구성되어있다. 쓰레드는. 프로세스 네에서 실제 작업을 수행하는 것이다 즉, 개념상으로 이해하자면 프로세스라는 공장에서(실제 가동중) 일꾼들이 일을 하고, 이 일꾼들을 쓰레드라고 한다. 멀티 태스킹은 동시에 여러 프로세스를 실행시키는 것을 의미한다. 멀티 쓰레딩은 하나의 프로세스에서 여러 쓰레드를 실행시키는 것으로 , 생성 비용이 적고 쓰레드들은 자원을 공유한다. 멀티 ㅡ레딩은 자원이 효율적으로 사용되고, 응답성도 좋아진다 허나! 동기화에 주의해야하고 , dead-lock상태가 발생할 수 있다. 즉 주의해야할 사항들이 생긴다. 1. Thread를 상속받아서 사용하거나, 2.Runa.. 2023. 12. 28.