일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- STREAM
- 허브
- LAN어댑터
- JPA
- jdk
- ansible
- map
- mybatis
- IntelliJ
- AOP
- cloud
- docker
- Java
- gradle
- container
- 액세스회선
- 라우터
- sonarQube
- Set
- post
- 소켓
- DevOps
- tomcat
- Collection
- Linux
- Pipeline
- Spring
- 방화벽
- Jenkins
- 캐시서버
- Today
- Total
목록웹 개발 (48)
거북이-https://velog.io/@violet_evgadn 이전완료
WAR와 JAR WAR와 JAR의 차이점을 설명하기 앞서 이 둘이 어떤 개념인지부터 알아야 할 필요가 있다. 과연 WAR와 JAR가 무엇일까? WAR(.war 파일), JAR(.jar 파일)은 모두 아카이브(압축) 파일이다. 이들은 Application을 쉽게 배포하고 동작시킬 수 있도록 Java 기반 Code로 생성한 실행 파일들과 실행 관련 파일들(Resource, 속성 파일, Dependency 파일 등)을 하나로 패키징 해주는 것이 주 역할이다. 개념만 보자면 조금 복잡할 수도 있으나 예시를 보면 매우 쉽다. 우리는 Web Application을 개발할 때 build.gradle에서 Dependency Tag 안에 필요한 의존성을 주입함으로써 원하는 기능을 추가할 수 있었다. 이 과정에서 Inte..
위 사진이 Spring Web 계층을 한 사진안에 담은 것이다. 이전에 설명했던 DTO, DAO, VO, Entity나 MVC 패턴 같은 것은 따로 설명하지 않고 Spring Web 계층 자체에 대해서만 집중하여 설명하도록 하겠다. Web Layer Presentation Layer라고도 한다. 브라우저에서 Web Client의 Request를 처리하거나 Respond를 보내는 역할을 수행하는 Layer이다. 또한 Service Layer나 Repository Layer에서 Exception이 발생할 경우 최종적으로 이 Web Layer에서 해당 Excpetion을 처리하게 된다. 자 Web Layer가 Request와 Respond를 처리하는, 외부 요청 및 응답에 대한 로직을 처리한 Layer라는 것..
DTO 이전 Section에서 말했듯 DTO는 Entity의 모든 필드값 중 사용할 필드만 뽑아서 새로운 Class를 만들면 된다. DTO에 대한 정해진 Rule이나 무조건 활용해야할 Annotation 등은 존재하지 않는다. 하지만 개인적으로는 Lombok의 @Data를 달아주는 걸 추천한다. @Data에는 Equals와 Hashcode가 달려 있어 DTO로써도 객체의 동일성 판단 여부가 가능해지며 toString을 구현해줘 디버그나 Junit Test에도 편리하고 @Getter와 @Setter를 자동으로 달아줘 코드량을 확 줄일 수 있다는 장점을 가진다. 두 번째로 toEntity() 메서드를 달아주는 것을 추천한다. DTO의 목적이 데이터를 Layer간 전달해주는 것이지만, 결국 DB와 통신하기 위..
DAO Data Access Object의 약자이다. 말 그대로 Data에 접근하는 역할을 하는 객체이며, 곧 DB에 직접적으로 CRUD 작업을 시행하는 클래스라고 말할 수 있을 것이다. DAO는 클래스 내부에서 직접적으로 CRUD 과정을 실행시킬 수 있어야 한다. Spring Data JPA에서 직접적으로 CRUD 과정을 실행하는 주체가 무엇이었는지 생각해보면 바로 "JpaRepository"였다. 엄밀하게 따지면 Repository와 DAO의 차이점은 존재하지만, 기본적으로 Spring Data JPA에서는 Repository가 DAO를 대체하기 때문에 개발자가 직접 구현할 일이 없는 데이터라고 볼 수 있다. 그렇다면 DAO와 Repository의 차이점이 무엇일까? 이는 DAO를 직접 구현한 클래스..
Spring Data JPA 먼저 Spring Data JPA를 활용하는 방식은 EntityManager의 활용 방식 차이이다. 이전에 배웠던 JPA의 Entity, @Id 등 Annotation에 대한 것은 완전히 동일하게 Spring Data JPA에서 활용할 수 있는 것이다. 그렇다면 Spring Data JPA는 일반 JPA와 어떤 점이 다르기에 그토록 사용을 추천하는 것일까? 우리는 이전에 일반 JPA에서는 EntityManager를 먼저 상속받은 이후 em.remove, em.find 등을 통해 활용함을 알 수 있었다. 하지만 JPA는 이 EntityManager를 상속받는 과정마저 없애버린 것이다. 실제로 MyBatis에서는 SqlSession을 활용하지만 이 SqlSession을 주입받는 ..
EntityListener ◎ EntityListener란? EntityListener란 특정 메서드에 어노테이션을 붙이면 어노테이션에서 명시된 시점에 해당 메서드가 호출되어 실행되는 것을 말한다. 예를 들어, 내가 View단에서 데이터를 보낼 때 [1,2,3,4] 같은 List 형식이 아닌 String 형식인 "1,2,3,4"로 데이터를 받았다고 가정하자. 그럴 경우 우리는 로직상 이 "1,2,3,4"를 List 형식인 [1,2,3,4]로 바꾸거나, 반대로 [1,2,3,4] List Data를 "1,2,3,4"로 변환하는 과정이 필요할 수도 있다. 그런데 이런 Case가 매번 실행되어야 한다면 같은 메서드를 계속해서 입력해줘야 한다는 것이고, 이는 객체지향적인 개발이 아닐 것이다. 따라서 EntityL..
지연 로딩 ◎ 지연 로딩이란? JPA 측에서 Entity가 실제로 사용되기 전까지 DB 조회를 지연하는 것을 말한다. 문제는 지연 로딩을 사용하기 위해서는 DB 조회를 하지는 않았지만 필요한 순간 바로 조회하여 저장할 "가짜 객체"가 필요하다는 점인데, 이 객체를 프록시 객체라고 한다. 프록시 객체는 처음 사용할 때 1번만 초기화되고, 프록시 객체를 통해서도 실제 Entity에 접근할 수 있다. 영속성 컨텍스트에 만약 찾는 Entity가 존재할 경우 em.getRefrence()를 통해 프록시 객체를 활용하더라도 실제 Entity가 저장된다는 특징이 있다. // 엔티티 직접 조회 - 영속성 컨텍스트에 없으면 DB 조회 Member member = em.find(Member.class, 100L); // ..
단방향 연관관계 ◎ 단방향 연관관계란? JPA를 활용해 연관 관계를 설정할 때는 "방향"을 지정해줄 수 있다. 예시로 팀과 선수를 생각해보자. 팀은 1개일 때 해당 팀에 소속된 선수는 다수 있을 것이므로 팀과 선수는 1:N 관계라고 생각할 수 있다. 여기에서 단방향을 설명하기 전에 양방향을 먼저 설명하자면, 사실 양방향은 따로 양방향이라는 개념이 존재하는 것이 아니라 "단방향 연관관계 2개를 설정한 것"이라고 생각하면 된다. 자 머리가 점점 아파온다. 이제 예시를 통해 조금씩 풀어보자. 먼저 나는 팀 데이터를 확인할 때는 선수를 보고 싶지만, 굳이 선수를 확인할 때는 해당 선수가 속한 팀 정보까지는 알고 싶지 않을 수도 있다. 내가 "최정"이라는 선수의 정보를 보고 싶은데, 굳이 SSG 팀의 연봉이나 승..
다양한 Mapping을 활용한 엔티티 클래스 @Entity @Table(name="MEMBER") public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME", nullable = false, length = 10) private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createdDate; @Temporal(TemporalType.TIMESTAMP) private Date lastModifiedDa..
persistence.xml 먼저 전체 완성된 persistence.xml 형식은 위와 같다. 그렇다면 한 부분씩 뜯어보면서 어떤 property가 어떤 역할을 하는지 알아보자. ◎ 설정 파일 명시 ~~~ 설정 파일임을 알리는 태그이다. ◎ 영속성 유닛(persistence-unit) ~~~ 영속성 유닛을 등록하는 방법으로 태그 안에 영속성 유닛(persistence-unit)에 대한 여러 가지 설정이 들어갈 수 있다. 영속성 유닛 1개는 여러 개의 Property를 가지고 있어 내가 원하는 EntityManagerFactory의 설정 값들을 넣어줄 수 있다. 일반적으로 연결할 DB 하나당 1개의 persistence-unit을 등록하는 경우가 많다. 예를 들어, name="mysql"인 영속성 유닛에는..