본문 바로가기

분류 전체보기88

JPA @Embedded, @Lob, 생성자 @Embedded 1. 새로운 값 타입을 직접 정의할 수 있다. 2. 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함 3. int, String과 같은 값 타입 @Embeddable: 값 타입을 정의하는 곳에 표시 @Embedded: 값 타입을 사용하는 곳에 표시 기본생성자 필수. 장점: 1. 재사용 가능 2. 높은 응집도 3. Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소드를 만들 수 있음. 4. 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티티에 생명 주기를 의존함. 매핑하는 테이블은 같지만 예를 들어 Address만으로 메서드를 만들면 활용도가 높아진다. 객체와 테이블을 세밀하게 매핑할 수 있다. 만약 한 테이블 안에서 주소를 두개 가져가야 .. 2022. 1. 15.
함수형 프로그래밍 프로그래밍 패러다임은 크게 아래와 같다. 1. 명령형 프로그래밍: 무엇을 할 것인지 나타내기보다 어떻게 할 건지를 설명하는 방식, 원하는 결과를 얻기 위해 특정 단계를 설명하는 코드 라인을 사용 - 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식(C) - 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현(C++, JAVA) 2. 선언형 프로그래밍: 어떻게 할건지 나타내기보다 무엇을 할 건지 설명하는 방식, 흐름 제어를 추상화하고 데이터 흐름을 설명하는 코드 라인을 사용 - 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식(하스켈, 리스프) 코드로 이해하는게 제일 쉽다고 생각한다. 아래 코드를 보면 import java.util.Arrays; impo.. 2021. 12. 15.
또다시 Optional 스프링보다 자바에 대한 공부가 더 필요하다는 생각이 든다. 생 객체가 아니라 Optional을 통해서 JPA의 값을 받으면서 서비스 단에서 null처리를 하면서 든 생각이 이런식으로 사용하면 객체를 사용하지 않을 이유가 없는데 왜 굳이 Optional을 쓰고 있을까? 였고 결과적으로 Spring Data JPA Repository의 메서드는 null을 반환하는 것이 아닌 비어있는 컬렉션을 반환해주므로 굳이 Optional을 이용해서 감쌀 필요가 없었다. Optional은 이전 포스팅에서도 말했듯이 자바8 에서 람다, 스트림 등과 함께 새로 나온 문법으로 null을 처리하는데 유용하게 쓰기 위한 하나의 포장지다. return user.getAddress() 위의 코드에서 user에 address가 없다면 .. 2021. 12. 1.
Optional, JPA N + 1, fetch 자바 8 Optional는 예상치 못한 NullPointerException 예외를 메서드로 회피할 수 있다. 또한 null체크를 안 해줘도 돼서 코드가 깔끔해진다. 만약 참조변수의 값이 만에 하나 null이 될 수 있다면 ofNullable()메서드를 이용해 Optional 객체를 생성하는 것이 좋다. Optional 객체 생성 -> String str = "abc"; Optional optVal = Optional.of(str); Optional optVal = Optional.of("abc"); Optional optVal = Optional.of(null); -> NullPointerException Optional optVal = Optional.ofNullable(null); -> ok 빈 옵.. 2021. 11. 26.
프로젝트 중 정리 @JsonIgnoreProperties({"recents"}) - 무한 참조를 방지하기 위해 연관된 테이블에서 재참조를 하지 않을, 무시할 컬럼을 지정한다. 참고 할 url Github 이슈 https://cheese10yun.github.io/github-proejct/ Github 라벨 https://velog.io/@modolee/github-initial-settings Github PR https://soft.plusblog.co.kr/66 에러들 JPA 도메인 설정 과정에서 오류가 많이 나왔다. 그 중 하나가 Composite-id class does not override equals() 와 Composite-id class does not override hash() Warn으로 떠도 실행.. 2021. 11. 22.
웹 소켓 웹 소켓 : 두 프로그램 간의 메시지를 교환하기 위한 통신 방법 중 하나. (HTML5에서 많이 쓰인다.) 특징 : 1. 양방향 통신 - 데이터 송수신을 동시에 처리 가능하다. - 클라이언트와 서버가 서로 원할 때 데이터를 주고받을 수 있다. 2. 실시간 네트워킹(Realtime networking) -웹 환경에서 연속된 데이터를 빠르게 노출 3. 텍스트와 바이너리만 전송할 수 있다. 방법 : 1. 핸드쉐이킹 기존의 http통신이랑 똑같이 3way hand-shaking을 통해서 통신을 시작한다. 이때 헤더에 들어갈 요소들이 있다. 요청 GET /chay HTTP/ 1.1 -- GET 메서드를 사용해야 하며 1.1 버전 이상이어야 한다. Host: server.example.com -- 웹소켓 서버의 주.. 2021. 11. 21.
211117 TIL HTTP 응답 스프링 부트는 정적 리소스는 파일을 변경 없이 그대로 서비스 하는 것으로 /static, /public, /resources, /META-INF/resources 디렉토리에 있는 정적 리소스를 제공한다. 예를 들어 src/main/resources/static/basic/hello-form.html을 실행하고 싶으면 http://localhost:8080/basic/hello-form.html을 실행하면 된다. 뷰 템플릿은 뷰가 응답을 만들어서 전달한다. 일반적으로 HTML을 동적으로 생성하는 용도로 사용한다. 클래스가 @Controller고 return을 String으로 하는 경우 @ResponseBody가 없으면 String에 해당하는 뷰 리졸버가 실행되고 @ResponseBody가 있.. 2021. 11. 17.
211115 TIL 스프링 MVC 정리 1. 요청 매핑파트 https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-arguments @RestController url 호출이 오면 이 메서드가 실행 되도록 매핑한다. 속성을 배열로 제공하므로 다중 설정이 가능하다. - {"/hello-basic", "/hello-go"} @RequestMapping() 괄호 안에 method의 값으로 HTTP 요청을 GET, POST등등 선택도 가능하지만 클래스단에서 공통 주소를 매핑해주고 내부 개별 매서드에서 개별 url을 GetMapping PostMapping등의 어노테이션으로 묶어주면 훨씬 깔끔한 코드를 만들 수 있다. @PathVaria.. 2021. 11. 16.
TIL-37 1. 공부내용 2. 소감 1. 공부내용 정규표현식 특정한 규칙을 가진 문자열의 집합을 표현하기 위한 형식 언어 Patter클래스나 Matcher클래스 등 여러가지 방법이 있어 보이지만 코테를 위한 정규표현식에서는 replaceAll만 이용할 수 있으면 될 것 같다. [] 안에 ^가 있으면 not을 의미한다. 만약 내가 알파벳 소문자만 남기고 싶다면 String str = s.replaceAll("[^a-z]", ""); 이렇게 적어주면 간단하게 끝난다. 온점(.)이 2번 이상 연속된 부분을 하나로 치환 s = s.replaceAll("\\.{2,}", ""); 온점이 처음이나 끝에 위치한다면 제거 대괄호 밖에 ^는 처음, $는 끝을 의미한다. s = s.replaceAll("^[.]|[.]$", "");.. 2021. 11. 9.
TIL-36 1. 개념정리 2. 소감 1. 개념정리 1. @MappedSuperclass 정리한 적이 있는데 여러 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다. 주로 등록일, 수정일같은 정보를 모을때 쓰인다. 직접 생성할 일이 없으므로 추상 클래스로 생성하는것을 권장한다. 또한 해당 클래스는 조회나 검색이 불가능하다. @Entity 클래스는 엔티티나 MappedSuperclass로 지정한 클래스만 사용 가능하다는 것을 명심해야 한다. https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 2. 직렬화란? 직렬화는 객체를 바이트 스트림으로 바꾸는 것이다. 다시 말해 데이터를 연속적 serial 데이터로 변환하는 것이다. 직렬화의 목적은 객체를 상태 그대로 저장.. 2021. 11. 8.
CPU scheduling 발표 노트 CPU 스케줄링에 대해 이야기 하기 전 스레드 = 프로세스 라고 전제하고 시작하자. 프로세스와 스레드에 대해 이해가 부족하다면 하림님 블로그를 참고해주세요 https://rlagkfla1212.tistory.com/35 먼저 CPU 스케줄링을 하기 전에 OS의 역할 º CPU의 사용률을 올리는 것. º 빈번한 컨텍스트 스위칭을 통한 타임 쉐어링 CPU 스케줄링이란 : CPU 스케줄러를 통해 레디 큐에 CPU의 타임 슬롯을 배치하는 것. 다시 말해 ready에 있는 프로세서들이 디스패쳐에 의해 프로세서에서 실행되는 것을 의미합니다. 선점과 비선점 비선점이란 한번 CPU가 할당되면 끝날 때 까지 CPU를 잡고 안놓는걸 얘기하고 선점이란 인터럽트에 의해 CPU가 뺴앗기는걸 이야기 합니다. 현대 OS는 전부 선.. 2021. 11. 7.
WIL-7 이번주 세가지 이슈를 정해보면 람다, 스프링, 상담이었던 것 같다. 월-금 AWS와 스프링 수업을 들으면서 느낀 점은 1. AWS 람다는 충분히 흥미로웠던 것 같다. 너무 매력적이다. 물론 스프링을 충분히 공부 한 후에 역량이 된다면. 2. 스프링은 지금까지 공부를 많이 해봤지만 나한테 지금 스프링을 설명해봐 하면 자바를 기반으로 한 프레임워크.. 그냥 기본 어노테이션 설명정도 가능할 것 같다. 스프링을 써볼수록 느끼는게 스프링을 스프링답게 사용하는게 중요하다는 생각을 많이 한다. 스프링을 익히는 것도 중요하지만 객체지향의 개념을 머릿속에 가지고 설계를 제대로 하는게 중요한 것 같다. 남은 시간 기본 기능을 확실하게 익히는것도 중요하지만 스프링답게 쓰기 위해서 노력해봐야겠다. 3. 상담도 지대한 영향을 .. 2021. 11. 7.