분류 전체보기
프로세스 상태 (Process State) new (생성 상태) 프로세스를 생성 중인 상태. PCB를 할당받은 상태 ready (준비 상태) 자신의 차례를 기다리고 있는 상태. 많은 프로세스들이 ready상태에서 자신의 차례를 기다린다. 이때 os는 실행 상태로 전환할 프로세스를 선택하는데 이 작업을 스케줄링이라 한다. CPU의 할당을 받으면 실행 상태가 되는데 준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치(Dispatch)라고 한다. running (실행 상태) CPU의 할당을 받아서 실행하는 상태. waiting (대기 상태) 입출력 작업이나 다른 이벤트가 발생하여 완료 인터럽트를 받을 때까지 기다리는 상태 running -> ready - cpu를 할당받아 실행 중인 running 상태..
게시글 조회 화면에서 검색타입, 정렬 방법에 따라 다른 결과를 반환해야 하는 기능을 구현하고 있었다. 단순한 검색 기능이면 스프링 데이터 JPA로 JPQL을 사용했겠지만, 이번 기능은 고려해야 할 부분이 많았기 때문에 Querydsl을 사용해서 구현해 보기로 했다. where문 작성의 경우 BooleanExpression과 BooleanBuilder를 사용해서 간단하게 작성할 수 있었는데, 정렬 조건에 따른 작성을 어떻게 해야 하는지가 문제였다. 처음엔 service단에서 sort값에 따라 처리하도록 아래와 같이 작성했었다. //PostService public Page findPosts(int page, int size, PostSearchDto postSearchDto, String sort) { P..
부트캠프가 끝나고 예전에 수강했던 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 다시 듣고 있었다. 서블릿 부분을 보던 중 의아한 부분이 있었다. 스프링의 내장 톰캣 서버는 서블릿들을 스캔하여 서블릿 컨테이너에 싱글톤으로 관리하면서 요청마다 WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체를 호출한다. 즉, 요청마다 request와 response객체는 요청마다 다른 객체가 만들어져서 servlet을 호출한다고 이해했다. 위와 같이 코드를 작성하고 요청 결과를 확인하다가 request, response가 같은 객체를 사용하고 있는 것을 확인했다. 강의에서는 요청마다 request, response를 생성해서 servlet을 호출한다고 했는데 같은 객체를 사용하길래..
스프링 HttpServletRequest, HttpServletResponse는 RequestContextHolder를 통해 가져오기 ServletRequestAttributes servletContainer = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletResponse response = servletContainer.getResponse(); HttpServletRequest request = servletContainer.getRequest();
스프링은 빈과 연관된 의존관계를 주입할 때 스프링 컨테이너에서 해당 빈을 조회해서 의존관계를 주입한다. 만약, 같은 타입의 빈이 두 개 이상 존재하면 스프링은 의존관계를 주입할 때 어떤 빈을 주입해야 할지 모르기 때문에 애플리케이션은 실행되지 않는다. Animal 인터페이스와 이를 구현한 Cat, Dog 클래스가 있고 AnimalService에서 Animal을 주입받는다고 가정하면 콘솔에 다음과 같이 나온다. Animal package hello.core.animal; public interface Animal {} Cat package hello.core.animal; import org.springframework.stereotype.Component; @Component public class Ca..
스프링 컨테이너 (Spring Container) 스프링 컨테이너는 애플리케이션 내부에서 사용되는 객체들을 관리한다. 정확히는 애플리케이션 빈의 생명주기를 관리하는데 빈 생성, 관리, 제거 등의 역할을 담당하는 곳이다. 객체들의 의존성 또한 관리해주기 때문에 개발자는 모듈 간 의존 및 결합으로 인해 발생하는 문제로부터 자유로워지고 핵심 로직에 집중할 수 있게 된다. 컨테이너는 BeanFactory와 BeanFacotry를 상속받아 사용하는 ApplicationContext가 있다. ApplicationContext가 BeanFactory의 기능에 더해 부가적으로 국제화, 환경변수 등 여러 기능을 제공하기 때문에 대부분의 경우에는 ApplicationContext를 사용한다. public interface..
약 4주(23/01/03 ~ 23/02/03) 간의 메인 프로젝트가 끝났다! 메인 프로젝트를 시작하기 전 ZEP에서 팀원을 구하는 모습은 마치 옛날의 메xx 자유시장 같은 모습이었다. 애견 관심 있으신 분들 찾아요@@@@ 지금 팀의 팀장님의 글이 눈에 띄어 바로 말씀드리고 팀에 합류했다. 팀 당 FE 3 / BE 3 기준이었는데 합류하자마자 자리가 꽉 차서 조금만 고민했으면 합류하지 못할 뻔했다.. 이렇게 모인 팀원들은 다 강아지를 키우거나 키운 경험이 있었고 그렇게 팀 이름은 동물 특공대가 되었다. 정규시간 외에도 작업 내용을 공유하면서 늦은 시간까지 회의해도 힘들지 않았고 이보다 더 좋은 프론트 분들이 계실까 싶을 정도의 페이지를 만들어주신 분들과 마음 잘 맞는 백엔드 분들 덕분에 4주가 재밌고 빠르..
JWT와 redis를 이용해서 토큰 재발급 로직을 작성하다 만난 에러 public void reIssue(AuthRequestDto.ReIssue reIssue, HttpServletResponse response) { //Refresh Token 검증 if (!jwtTokenProvider.validateToken(reIssue.getRefreshToken())) { throw new BusinessLogicException(ExceptionCode.INVALID_TOKEN); } String accessToken = jwtTokenProvider.resolveToken(reIssue.getAccessToken()); //AccessToken으로 Authentication 생성 Authenticatio..
환경 : ec2 (ubuntu 18.04), spring boot, nginx/1.14.0(ubuntu), certbot으로 domain https 인증서 발급 certbot https 인증서 발급 참고 블로그 https://junho85.pe.kr/2048 - sudo mkdir /var/log/nginx/proxy/ # log, error 파일용 디렉토리 - sudo vi /etc/nginx/proxy_params 아래 코드 작성 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header ..