전체 글 120

spring boot 에서 interceptor

이전에 filter에 대해 보았습니다. https://balldev.tistory.com/41 [spring의 dispatcher-servlet와 filter dispatcher servlet 이 해당 애플리케이션으로 들어오는 모든 요청을 핸들링 해주고 공통 작업을 처리하면서 편리하게 이용이 가능하다!! ** 예전에는 모든 서블릿에 대해 URL 매핑을 web.xml에 해줬어야 balldev.tistory.com](https://balldev.tistory.com/41) 인터셉터는 컨트롤러 가기 전, 후로 나뉩니다. 인증관리 등 여러경우에 은근 쓰이는것 같습니다. filter와의 차이 사진을 보시는 것과 같이 filter와의 차이는 dispatcher servlet의 앞에 있냐 뒤에 있냐입니다. 그리고 인..

도커 컨테이너 작동원리와 순서

컨테이너는 위 그림처럼 격리 되어있음 ( 커널은 공유) 어떻게 컨테이너를 격리를 시킬까 c group 과 namespace를 사용 c Group, namespace cpu, 메모리를 원하는 만큼만 할당 namespace로 격리 이미지로 컨테이너를 만드는 과정 도커 이미지 응용 프로그램을 실행하는데 필요한 모든 것 시작 명령어 파일 스냅샷 작동 순서 docker run ... 도커 클라이언트에 명령어 입력후에 도커 서버로 보냄 도커 서버에서 컨테이너를 위한 이미지가 캐쉬가 되어 있는지 확인 없으면 도커 허브에서 다운 받아옴 있으면 이미 가지고 있는것에서 컨테이너 생성 파일 스냅샷 되어 있는것을 컨테이너 하드 디스크에 올림 시작 커멘드로 어플리케이션 실행

도커 2021.12.04

nginx란??

nginx란? 엔진엑스(Nginx)는 Igor Sysoev라는 러시아 개발자가 동시접속 처리에 특화된 웹 서버 프로그램으로 apache보다 동작이 단순하고, 전달자 역할만 하기 때문에 동시접속 처리에 특화되어 있습니다. nginx 비동기, 이벤트 기반 구조 - Event-driven 동시접속 처리에 특화된 웹 서버 프로그램 apache 스레드/프로세스 기반 구조 한 개의 쓰레드 당 한개의 프로세스 사용 동시 접속 수가 많은 경우 많은 쓰레드가 생성되며 메모리, cpu 낭비됨 그러면 nginx의 역할에 대해 좀 더 자세히 다뤄보겠습니다. 웹서버 주로 정적 콘텐츠(이미지, 정적 html)등을 제공하기 위해 설계 동적 콘텐츠 요청을 식별하여 앱 서버로 요청을 전달 하지만 이러한 역할도 하지만 nginx는 역방..

인프라/nginx 2021.12.02

JPA - cascade, orphanRemoval

cascade 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 기능 예) 게시글과 게시글 좋아요의 관계 public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true) private final List boardLikeList = new ArrayList(); .. 생략 } public class BoardLike { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Many..

docker - 도커를 쓰는 이유??

일단 도커란?? 컨테이너 기반 가상화 도구입니다. 가상화란?? 물리적인 하나의 서버가 있고 그 서버의 자원을 나눠서 가지면서 분산 각각 다른환경, 다른 서비스를 실행할 수 있게 된 것입니다. 그리고 가상화를 통해 많은 자원이 필요한 곳에는 많을 자원을 주고 그렇지 않은 곳에는 적은 자원을 줄 수 있게되어서 하드웨어를 좀 더 효율적으로 사용할 수 있게 되었고 유지관리 비용을 줄 일 수 있습니다. 하이퍼 바이저?? 위와 같은 서버 가상화를 구현해주는 것이 하이퍼바이저 여러 개의 운영체제를 하나의 호스트에서 생성 → 가상머신 가상머신에 생성된 os를 게스트 os라고 합니다. 하지만 가상머신은 반드시 하이퍼바이저가 반드시 필요 → 호스트 os에 비해 성능이 떨어짐 게스트 os를 사용하기 위한 커널, 라이브러리 ..

도커 2021.11.20

JPA - proxy(프록시)

printMember(Member member) { member.getUsername(); // username만 가져오면 되는데 team 정보도 가져오면 성능상 손해 } printMemberAndTeam(Member member) { member.getTeam(); member.getUsername(); } 지연로딩, 프록시로 해결 가능 프록시 em.getReference() - 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 초기화 할 때는 sql 이 생성 안되고 아래처럼 사용 될 경우 호출함 System.out.println("findMember.username = " + findMember.getUsername()); proxy가 값을 가지고 있으면 그 proxy객체에서 반환 없으면 초..

JPA - 상속관계 매핑

상속관계 매핑 - 3가지 종류가 있음 - 조인전략, 단일 테이블 전략, 구현 클래스마다 테이블 전략 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 RDB에는 없음 @Entity @Inheritance(전략은 고를 수 있음) public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; } @Entity public class Album extends Item { private artist; } 위의 엔티티로 예시 조인전략 조인 전략 -- 정석적인 전략 @Inheritance(strategy = InheritanceType.JOINED) //이거 없으면 그냥 한 테이블..

JPA - 연관관계 매핑(2)

@ManyToOne 단방향, 양방향 테이블 - 외래 키 하나로 양쪽 조인가능 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 객체 양방향 관계는 참조가 2군데가 있어서 외래키를 관리할 곳을 정해야함 주인의 반대편: 외래 키에 영향을 주지 않음 단순 조회만 가능 다쪽에 외래키가 있음 @ManyToOne @JoinColumn(name="team_id") private Team team; @OneToMany(mappedBy = "team") private List memberList = new ArrayList(); @OneToMany - 잘 안쓰임.. 테이블에는 다쪽에 외래키가 있어서 외래키가 매칭이 맞지 않음 ⇒ 다대일 양방향이 더 좋다. @ManyToOne @JoinColumn(name="team_id"..

cloudwatch로 agent 등록해서 로그보기

ec2에서 cloudwatch agent를 설치하여 모니터링을 해보겠습니다. 1. IAM 롤 추가/생성 먼저 기존에 없다면 IAM 롤을 생성하시고 기존에 있다면 IAM 롤을 추가하시면 됩니다. 저는 기존에 있기때문에 추가했습니다. 위 사진의 IAM에 들어가서 정책연결을 통해서 CloudWatchAgentServerPolicy를 추가해줍니다. 2. ec2에 들어가서 cloudwatch Agent 설치 저는 amazon linux2입니다. $ wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm $ sudo rpm -U ./amazon-cloudwatch-agent.rpm..

aws 2021.11.01

JPA - pageable을 이용한 paging

이런식으로 페이징이 되어있는 사이트가 많이 있다. JPA 에서 또 Spring Data jpa 프로젝트에서는 효과적으로 페이징을 처리할 수 있게 방법을 제공한다. 제가 프로젝트 하면서 사용한 코드들인데 나중에도 기회가 되면 쓰려고 정리합니다 ㅎㅎ 먼저 querydsl을 사용하지 않고 spring data jpa를 사용할 때부터 보겠습니다. spring data jpa 사용법은 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation 여기를 봐주세요. PageRequest.of에는 page(0부터 시작) size를 적어주면 됩니다. Pageable pageable = PageReque..