본문 바로가기

공부방/Spring

(8)
스프링 부트 - 핵심 원리와 활용 📖 톰캣 자바 17 버전 또는 그 이상으로 사용. 톰캣 10버전 이상으로 다운 📌 톰캣 실행 (윈도우) 설치한 톰캣폴더/bin 폴더로 이동 실행 : startup.bat 종료 : shutdown.bat URL localhost:8080으로 접근하면 톰캣 서버가 실행됐는지 확인할 수 있다. 톰캣 실행했는데 접근이 되지 않으면 실행 로그를 확인한다. 실행 로그는 톰캣폴더/logs/catalina.out을 확인 ✯ "사이트에 연결할 수 없음. localhost에서 연결을 거부했습니다." 의 에러가 발생한 경우 꼭 자바 18버전이 맞는지 확인하고 환경 변수 JAVA_HOME의 경로를 제대로 입력했는지 확인. 📖 WAR 빌드와 배포 윈도우는 gradlew build를 해서 war 생성 (cmd에서 반드시 프로젝트..
스프링부트 전통적인 방식 과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 서버에 톰캣 같은 WAS(웹 애플리케이션 서버)를 설치했다. 그리고 WAS에서 동작하도록 서블릿 스펙에 맞추어 코드를 작성하고 WAR 형식으로 빌드해서 war 파일을 만들었다. 이렇게 만들어진 war 파일을 WAS에 전달해서 배포하는 방식으로 전체 개발 주기가 동작했다. 이런 방식은 WAS 기반 위에서 개발하고 실행해야 한다. IDE 같은 개발 환경에서도 WAS와 연동해서 실행되도록 복잡한 추가 설정이 필요하다. 최근 방식 최근에는 스프링 부트가 내장 톰캣을 포함하고 있다. 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있다는 뜻이다. 개발자는 코드를 작성하고 JAR로 빌드한 다음에 해당 JAR를 원하는 위치에서 실행하기만..
스프링 프레임워크의 등장 배경 스프링 프레임워크의 등장 배경 태초에 EJB라는 Java 진영 표준 기술이 존재하였다. 잘 구성되어있는 기술이지만, 가격이 굉장히 비싸고, 서버 한대당 수천만원짜리 소프트웨어를 설치해야했다. 수많은 개발자들이 EJB 기술로 개발을 시작하였지만, 이론은 너무 좋은데 제대로 공부하기에 너무 복잡하였다. EJB 인터페이스를 제공해주는데 모든 코드가 EJB 의존적으로 개발하게 되었다. (특정 기술의 종속) POJO (Plain Old Java Object) -> 순수한 자바코드를 사용하자 라는 말이 나올 정도였다. EJB 지옥에서 놀라운 기술에서 탄생하였다. EJB 프로젝트로 많은 고통을 받았던 SI 개발자 로드 존슨 본인이 직접 책을 쓴 것을 기반으로 만든 것이 Spring framework이다. Spring..
[Mysql] order by, group by 특정 Key로 Group by 시 첫번째 데이터를 기준으로 묶이게 된다. 1 team_A 토끼 2 team_A 말 3 team_A 강아지 위와 같은 데이터로 예를 들면 ’team_A’로 Group By 할 경우 첫번째 데이터를 기준으로 1 team_A 토끼 와 같이 묶이게 된다. 이름 순으로 정렬 후 Group By를 하고 싶을 땐 적절하게 Order By 후 진행한다. 1 team_A 강아지 2 team_A 말 3 team_A 토끼 Order By를 이용해 위와 같이 데이터를 정렬 한 후 Group By 를 진행 하면 ’team_A’, ‘강아지’ 로 묶인다. 원하는 데이터를 기준으로 Order By 후 Group By를 하면 되지만 쿼리 실행 순서나 문법 상 Group By를 먼저 수행하게 되므로 아래..
deleteById, deleteByName testRepository.deleteByName("이름1"); testRepository.deleteById("id1"); deleteById deleteById 코드를 하나씩 살펴보면 아래와 같은 내용이 구현되어있다. deleteById 내부적으로 delete를 호출하고있다. 넘어온 id값으로 findById를 사용하여 delete에 인자로 넘겨줄 데이터를 조회하고있다. 넘어온 id 값이 null 인 경우는 EmptyResultDataAccessException 을 발생시키고 있다.
[오류] FK가 PK가 아닌 다른 컬럼과 연관관계가 있을 때 결론: FK가 바라보고 있는 엔티티에 implements Serializable을 추가해주면 된다. 연관 관계 매핑 fetch join에서 FK가 PK가 아닌 다른 컬럼과 연관관계가 있을 때, referencedColumnName 사용. (default는 연관테이블의 @Id를 보고 쿼리생성) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "REGIST_ID", referencedColumnName = "SSO_KEY") private User user; --> Exception 발생 java.lang.ClassCastException: com.humuson.tasbatch.domain.postman.TasUser cannot be cast to java...
[JPA] PK가 아닌 필드를 참조하는 FK를 만들 때 결론: @JoinColumn(referencedColumnName = [참조하는 필드 이름]) 오류 상황 공부 겸 진행중인 스프링 부트 프로젝트에서 생긴 문제이다. Solved라는 table에서 School의 필드를 참조하는 FK를 가져야 하는 상황이다. 각 Entity 코드는 다음과 같다. School @Entity public class School implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name="school_id", nullable = false, unique = true) private Long schoolId; // 학교 번호 @OneToMan..
다대다 연관관계 오늘은 다대다 연관관계를 살펴보겠습니다. Member는 Product 리스트를 들고있고 Product도 Member 리스트를 가지고 있는 아래와 같은 상황입니다. 객체는 위와 같이 서로가 서로의 리스트를 가지고 있을 수 있지만 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 진짜 이 말이 맞는지 코드를 작성하고 확인해 보도록 하겠습니다. Member entity를 작성합니다. @Entity public class Member { @Id @GeneratedValue private Long id; private String username; @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") private List products = new Ar..