1 minute read


docker를 공부해야했다.
하나의 인스턴스에 두 개의 호스팅을 하는 상황..
톰캣으로 다중 호스팅 하는 건 이미 구시대의 유물이렸다.

Docker컨테이너를 사용해 spring boot의 jar를 배포해보기로 했다.

FROM rtfpessoa/ubuntu-jdk8
ADD GuivingAdmin.war app.war
ENTRYPOINT ["java","-Dspring.profiles.active=dev","-jar","/app.war"]



별건 없고 DockerFile 내용인데 특이점은 jar가 아닌 war로 시도했던 흔적…
jar에서 tomcat-tiles의 경로를 잡는데 no url resource 에러가 난 것이다..
찾아보면서 다시 시도해봤는데 실패한 상황..

참조링크
https://galid1.tistory.com/428

이미 tiles자체 (jsp)도 구시대 유물이 되어버리고 jsp자체도 spring boot에서 사용하지말라고 한다.
결국은 mustache 혹은 thyemleaf로 넘어가야하는 것인가 싶다.

한가지 더 적어두자면
jar빌드 과정에서 좀 애를 먹었는데 sts오류인지 나의 잘못인지
project clean을 하지 않으면 자꾸 실패가 떴다..

내일 다시 이부분 살펴보는걸로..















일련의 이유로 시간아깝게 sts가 디펜던시를 엄청 오랫동안 다운받아
intellij를 켜서 entity를 좀 더 만들었다.


@ToString(exclude = "company")
@NoArgsConstructor
@Getter
@Entity
@Table(name="TB_OPERATOR")
public class Operator {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="op_idx")
    private Long id;

    @Embedded
    @AttributeOverrides({
            @AttributeOverride(name = "firstName",column = @Column(name = "op_f_name")),
            @AttributeOverride(name = "lastName",column = @Column(name = "op_l_name"))
    })
    private Name name;


    @Column(name="op_email")
    private String email;

    @Column(name="op_phone_num")
    private String phoneNum;

    @Column(name="op_password")
    private String password;

    @Column(name="op_uid")
    private String uid;

    @ManyToOne
    @JoinColumn(name = "op_company_idx")
    private Company company;
}


오퍼레이터 엔티티를 만들어봤는데
vo개념 (식별자가 없는 필드객체)을 사용해보고 싶었고 검색을 통해 @Embedded를 알게되었다.


참조링크
https://velog.io/@conatuseus/JPA-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-%ED%83%80%EC%9E%85embedded-type-8ak3ygq8wo



@Embeddable
@Data
public class Name {
    private String firstName;
    private String lastName;

    public String getFullName(){
        return firstName+" " + lastName;
    }
}


@Embeddable 어노테이션으로 entity의 필드로 속성을 가질 수 있고
@AttributeOverrides와 @AttributeOverride를 통해 각 테이블을 vo객체의 필드로 매핑할 수 있다.

주의할 점은 연관entity인지 vo인지 잘 판단하여 필드를 구성해야 할 것이다..


public interface OperatorRepository extends JpaRepository<Operator,Long> {

    @EntityGraph(attributePaths ={"company","company.city","company.city.country"} )
    @Query("select DISTINCT a from Operator a")
    List<Operator> findAll();

}


엊그제 알게 된 outer join을 사용한 n+1해결
(오퍼레이터는 company 테이블과 외래키 연결이 되지 않는시점이 있기때문에..)



오늘은 여기까지





구식일지라도
내일은 tiles를 docker에 올릴 수 있는 방법을 잘 모색해보는걸로 마무리