목록Framework (19)
먹었으면 뇌를 쓰자

스프링의 구조를 알아보고, 각 구조별로 예시를 정리해보자. 컨트롤러 사용자의 요청과 함께 들어온 데이터를 받고, 필요한 메소드를 실행한다. 메소드는 서비스에게 로직 실행을 지시한다 (필요한 경우 서비스에 데이터를 전달한다). @Controller : 서비스에게 응답을 받아 모델에 담고, 뷰 리졸버에게 HTML 페이지 만들 것을 지시한다. @RestController : 서비스에게 받은 응답을 문자열로 반환한다. 서비스 컨트롤러에게 로직 실행을 지시받는다. 리파지토리에게 CRUD를 요청한다. 응답 데이터를 넘겨받고 이상 유무를 검사한 뒤 로직을 실행한다. 하나의 트랜잭션이 수행되고, 커밋된다. 리파지토리 서비스에게 CRUD 요청을 받는다. DB에 접근해서 SQL문을 실행한다. (김성렬 교수님 강의 'See..

상황: Person.class와 Address.class가 @OneToMany 양방향 연관관계 설정되어 있다. Person.class는 'addresses'를 통해 Address.class의 데이터를 담아온다. Querying(Select) - JPAQueryFactory는 EntityManager를 통해 JPQL 쿼리를 날린다. - Q타입 클래스 파일을 선언해야 한다. - 해당 쿼리는 이름에 'k'가 포함되면서 22살 이상인 필드를 리스트로 반환한다. - 출력은 forEach문을 이용해 이름을 출력하도록 한다. 결과 반환 fetch : 여러 개의 결과를 리스트로 반환 fetchOne : 하나의 결과를 지정한 타입으로 반환 fetchFirst : 여러 개의 결과 중 가장 처음 결과만 반환 fetchCou..

헬퍼 메소드(helper method) : 우리 클래스 안에서 a 메소드를 도와주는 b 메소드 외부 클래스에서 a 메소드를 호출하면, a 메소드를 돕는 b 메소드도 연쇄적으로 동작하게 된다. 1. Address 객체의 인스턴스 생성되면 2. 우리 클래스와 매핑된 변수 addresses에 더하겠습니다 (우리 클래스가 One이기 때문) 3. 그러기 위해선 인스턴스에게 우리 클래스에 대한 접근을 가능하게 해줘야겠습니다 1. Person 객체의 인스턴스 생성되면 2. 우리 클래스와 매핑된 변수 person에 매치하겠습니다 (우리 클래스가 Many이기 때문) 3. 그러기 위해선 인스턴스에게 우리 클래스의 데이터를 매핑된 변수를 통해 읽어갈 수 있게 해줘야겠습니다 1. 외부 클래스에서 Person.class의 인스..

상황 : 다음과 같이 인수 생성자(arguments constructor)를 통해 입력을 받기로 한 객체들이 있다. 코드가 정상으로 작동하기 위해서는 인수 생성자뿐만이 아닌, "기본 생성자"를 함께 명시해야 한다. 변수도 받지 않고, 텅 빈 강정같이 속이 빈 생성자다. 그 이유는 무엇일까? 원래 기본 생성자는 클래스에 자동으로 배정된다. Person.class와 Address.class 모두 눈에 보이지는 않지만 기본 생성자가 배정되어 있는 상태이다. 기본 생성자가 배정된 상태이므로 두 클래스를 복제한 new Person()과 new Address()를 만들 수 있는 것이다. 그런데 내가 인수 생성자를 만들었다. 이 행동으로 인해 기본 생성자가 사라져버린다. 웃기네... 그래서 인수 생성자를 만들 때는 ..

1. TypedQuery 실행 @OneToMany 연관관계를 매핑하고, One과 Many에 각각 데이터를 입력하고, TypedQuery로 select문을 실행하는 과정이다. TypedQuery query = em.createQuery ("SELECT DISTINCT p FROM Person p JOIN FETCH p.addresses", Person.class); List resultList = query.getResultList(); resultList.stream().forEach(v-> System.out.println("v = " + v)); query.getResultList()는 결과가 하나 이상인 경우 리스트로 반환해주는 메소드이다. 가령 게시판에 게시물이 연관관계로 설정된 경우, 여러 게시..

객체 지향 프로그래밍(OOP)의 가장 큰 특징은 '객체 무결성'을 지키는 것이다. 간단하게 말하면 교실에서 싸움이 일어났을 때, "우리 반 빼고 나가!!!!" 하는 것이다. 그래서 변수를 선언할 때도 private을 지정해줘서 다른 클래스에서의 접근을 막는다. 하지만 살다보면 다른 클래스에서 우리 클래스 친구를 부를 때가 있다. setter는 다른 클래스에서 우리 클래스 친구에 접근할 수 있게 한다. getter는 다른 클래스에서 우리 클래스 친구를 직접 데려갈 수 있도록 한다. //Person.class와 Address.class가 @OneToMany로 매핑된 상황. //Person.class는 (mapped by "person"), addresses 인스턴스. //각 클래스 변수들에 getter an..

요즘 김성렬 교수님의 JPA 강의에 푹 빠져있다. 교수님께서 강의를 하시며 '헬퍼 메소드'를 자주 언급하시는데, 어떤 개념인지 잘 이해가 안 갔다. 자바 개념의 명칭은 직관적인 것들이 많다. Helper method 니까 뭔가 도와주는 메소드구나 라고 두루뭉술하게 넘어가다보니 한계가 와서 Nathan Schutz 라는 유튜버의 짧은 강의를 들어보았다. Helper method a method helping another method inside of a class and it can only be accessed from inside the class it is in 헬퍼 메소드는 자기 클래스 안의 다른 메소드를 도와주는 기능을 하며, 자기 클래스에서만 호출 가능하다. 일반 메소드와 헬퍼 메소드의 가장 ..

스프링은 JAVA/Kotlin 언어를 기반으로 편리한 개발을 돕는 프레임워크이다. 스프링은 한국 전자정부표준프레임워크이다. IDE(통합 개발 환경) 프로그램은 이클립스 기반 Spring Tools, IntelliJ 등이 있다. 내가 살짝 맛본 IDE는 인텔리J이다. 이클립스가 직관적이고 깔끔하다면, 인텔리J는 빠르고 성능이 좋다는 인상을 받았다. 스프링은 여러 특징이 있다. 그런데 이해하기가 꽤나 어렵다. 그래서 내가 이해할 수 있는 내용을, 이해할 수 있는 말로 정리해보았다. 스프링의 특징 ① AOP(관점 지향 프로그래밍) 애플리케이션에는 핵심 기능과 부가 기능이 있다. 예를 들어 성심당 웹 페이지에서 빵을 주문하는 앱을 만든다고 하자. 클래스 A(빵 주문) 핵심 기능 : 주문 부가 기능 : 로그 추적..

스프링입문을 냅다 들어보면서 핵심 개념을 주워듣고 있다. 정보처리기사 공부에서 잠깐 공부한 개념들이 나와서 반가우면서도... 역시 아직 잘 모르겠다~ 그래서 정리를 해놓으려고 한다. MVC(Model-View-Controller) - 소프트웨어 아키텍처의 한 유형이다. - 모델, 뷰, 컨트롤러라는 별도의 컴포넌트에서 개발 작업을 수행할 수 있다. - 여러 개의 뷰를 만들 수 있어, 한 개의 모델에 여러 개의 뷰를 필요로 하는 대화형 어플리케이션에 적합하다. (대화형 어플리케이션 : 온라인 쇼핑몰, 스마트폰 앱과 같이 사용자 요구 발생 시 시스템이 처리하는 소프트웨어) 모델(Model) - 서브시스템의 핵심 기능과 데이터를 보관한다. 뷰(View) - 사용자에게 정보를 표시하는 화면이다. - 강의에서 봤던..