본문 바로가기

백엔드62

스프링. 상세히 데이터 관리및 조회 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.
H2 database , DB활용 / Entity 추가 / Repository,service 간단 복습 application properties에 해당 내용 추가해주어야, http://localhost:8080/h2-console 로 입장시 뜬다. 역시 spring 사이트 자체를 잘 활용하자. 초간단 db h2 db에 접근 성공 . @ENTITY를 붙인순간, 엔티티로 들어갈 것임을 공표한것과 마찬가지이기 때문에, CLASS에 규약이 생긴다. @Enumerated(EnumType.STRING) private Developerlevel developerlevel ; DeveloperLevel이라는 열거형이 있다. 이를 enumtype으로 지정하여 내 entity의 변수로 쓸 것이다 ! enum이 클라스와 대응하는 관계의 객체임을 배웠다. (반대란 의미는 아니고 개념이 변수가 아니라고) descriptrion을.. 2023. 12. 27.
Controller , componet 어노테이션. CLASS, 컴포넌트, 모듈 . Controller 사용자의 입력이 최초로 받아들여지는 곳 @Restcontroller -> 완성할 bean이 , restcontroller라는 type으로 등록. response body가 자동으로 달린다. 즉 , RESTAPI를 입력으로 받는 진입점으로 사용하겠다 사실상 @Component이다. @Component ? 가장 기본적인 방식. -> 최소한의 단위 . 모듈로써 시스템을 유지보수하는 부품. 컴포너트는 클래스와 다른 개념이고 , interface를 통해서만 접근할 수 있다. 모든 빈은 컴포넌트이지만 모든 컴포넌트가 빈은 아님. 어노테이션으로 해당 class가 빈임을 알린 형태. '기능, 혹은 시각적인 하나의 요소 ' 완성한 CLASS를 COMPONENT로 등록할때는 @COMPONENT를, 완성.. 2023. 12. 27.
롬복 + Dto 상세 롬복이 무엇인가 ? 보일러 플레이트 코드들을 자동으로 생성해주는 필수적인 library build.gradle의 dependecies에 추가 . 설정이 필수적으로 같이 와야 됨. 앞서 작성했던 라인에서, dependices에 추가 혹은 spring.io에서 세팅 완료된 파일을 다운로드 . setter , getter을 @Setter @Getter로 class앞에 생성. -> 추가적인 메소드 작성이 필요없이, set,get등을 사용할 수 있다. @ToString -> class devdto를 그대로 sout으로 출력했을때, hash 코드 값이 출력되는데 이를 붙이면, 이에 맞는 시간과 , age등 형식에 맞추어서 출력된다. 생성자 @NoArgsConstructor -> argument가 없는 생성자 All.. 2023. 12. 27.
Null Safety 널 안정성 sql기억하자. 진짜 null이 너무 힘들었던 기억이 있다. 빈객체이자, 연산시는 0이자.. 이런 관리하기 힘들었던 null을 자바로 검증해보자! 매번 if(request (매개변수이다) == null ); return ; 해줘야한다. 이렇게 반복적으로 계속 똑같은 코드를 찍어야 하는 것을 보일러 플레이트라고 한다. 1. @NonNull 해당것은, NULL이 아니다. 메소드 변수 앞에, 메소드 앞에 , 변수 앞에 모두 붙일 수 있다. 만약에 NULL이 나오면, 호출 되기도 전에 EXCEPTION이 빠르게 발생. + 에러내용 확인이 가능하다. 2. @Nullable -> null일 수 있음을 명시함. ide에서 알려주고 ,warning을 직접 찍어주기 까지 한다. ! 굉장히 쉽다. 2023. 12. 27.
SpEL 특별한 표현 언어로써, 문법을 통해 데이터나 설정값을 가져오는 것 . ex) school.calls.teacher.name이라 하면, 학교의 반의 선생님 이름 과 같이 데이터를 가져온다. 이럴때 주로 사용하는 expression langauge . Spring에서 사용가능하고 주로쓰는 짧은 표현 언어라고 볼 수 있다. Helloworld라는 문자열을 그 자체를 literal로 받아서, 이를 concat할수도 있고, Uppercase인 새로운 HELLOWORLD도 얻을 수 있다. (허나 이렇게 사용하는 경우는 거의 없다. 작동구조를 위한것) Bean의 properties( properties는 bean의 설정이나 데이터 값 (변수, 속성이라고 한다))가 상수가 아니기를 바랄 때가 많을 것이다. 이럴 때 주.. 2023. 12. 27.
Resource URL보다 고차원적인 개념으로 파일들을 가져오기 위하여. SPRING에서 제공하는 INTERFACE RESOURCE라는 객체로 생성했을때, 사용할 수 있는 메소드 들. UrlResource(기본적인 url), ClassPathResource (classpath하위 리소스 접근시) FileSystemResource(file을 다룸) 등등이 있다 . 실사용 -> ResourceLoader 실제 사용은 applicationContext라는 스프링의 핵심 기능을 집약해둔 모듈에서, (스프링 구성,동작등을 모두 전담) 이와 같이, ResourceService라는 빈을 등록하면서 ApplicationContext가 자기 자신을 ctx에 삽입. 그 이후 setResource라는 메소드를 통해서, 본인 자체로 특정 경.. 2023. 12. 26.