로그인 시, 토큰을 생성한다.클라이언트에 토큰을 저장한다.클라이언트에서 요청 때마다 토큰이 동봉되어 서버로 보내진다.서버는 토큰이 유효한 지 검사한다.4-1. 유효 -> OK4-2. 유효X -> Nope먼저 로그인을 하게 되면 토큰이 발급되고, 이를 클라이언트에 보내
@Value를 사용해서 properties에 값을 숨기고, 사용할 수 있다.| application-secret.properties나는 admin토큰과 jwt 시크릿 키, 만료시간을 담아놓았다.| application.propertiesapplication-secret
coco 프로젝트 사용자 피드백 기간을 앞두고, 로그를 파일로 저장해서 로그 관리를 해보라는 튜터님의 피드백이 있었다. Slf4j와 Logback은 'org.springframework.boot:spring-boot-starter-web'에 구현되어 있기 때문에 따로
coco 프로젝트를 하면서, 엔티티에 @Setter를 붙여서 사용을 했었다.하지만 튜터님들이 @Setter 사용은 지양하라고 하셨고 이유는 다음과 같다.Setter를 사용하면 목적성이 보이지 않는다. 즉 모호하다이유는 왜 이 부분에서 Setter를 사용했는지 알기 어렵
coco 프로젝트를 하던 중에, 예외 처리를 잘 해보라는 튜터님의 피드백이 있었다.기존에 우리 팀은 특별한 예외처리를 해주지 않았었다.에러가 발생하면 무조건 500 에러로 처리되고 있었다.어떻게 예외 처리를 해주어야 할 지 이리 저리 찾아보다가 ResponseEntit
로그 시간이 9시간 전으로 찍혀서 이리 저리 찾아보다가 발견한 방법이다.JVM의 시간을 설정하는 방법!이 방법으로 문제가 해결되진 않았지만, 몰랐던 부분이라 적어본다..application.java (main메소드 있는 곳)에 넣어주면 된다.
COCO 프로젝트 중에 CORS 처리한 것을 수정하다가 알게 된 것이 있어서 적는당CORS?| WebConfig.java기존에 우리 프로젝트의 CORS 설정한 부분이다..allowedOriginPatterns("\*")로 인해 모든 도메인에 대해서 접근이 열려있는 것을
프로젝트 배포를 했는데, XSS 공격이 가능하다는 것을 알게 되었다.캠퍼분들과 튜터님이 게시글에 alert를 띄워놓고 난리였다..무튼, 이걸 방어하기 위해서는 html 태그를 문자 그대로 출력되도록 해야했다.튜터님은 프론트단에서 해줄 수 있다고 하셨는데, 우리가 방법을
검색 기능이 있으면 좋을 것 같다는 피드백을 반영해, 구현해보기로 했다.| PostController.java클라이언트에서 넘어올 검색어를 'query'라는 변수로 받고 서비스에 넘겨주었다.| PostService.javaController에서 넘어온 'query'가
게시글을 조회했을 때, 조회수가 증가하는데, 문제는 새로고침해도 조회수가 계속 증가한다는 피드백이 있었다.이를 보완하기 위해 찾아보다가 방법을 찾았고, 적용도 성공해서 적어본다.| Post.java조회 수를 나타내는 필드이다.| PostService.java게시글 조회
필터가 있었으면 좋겠다는 피드백이 있어서 적용해보았다.조회수 순, 댓글 많은 순으로 게시글을 조회하는 필터를 만들어 보았는데, 잘 된 건지는 모르겠다ㅎㅎ..서버에서 필터 기능을 만드는 것은 어렵지 않았다.단순히 게시글을 어떤 기준으로 조회할 지 repository나 s
로컬 환경에서는 쿠키가 잘 통신되는데, 배포 환경에서는 쿠키가 클라이언트에 저장이 안되는 문제가 발생했다게시글 조회 수가 중복으로 증가되지 않도록 하기 위해 쿠키를 사용했다. 'postView'라는 쿠키에 게시글 번호가 담기고, 해당 게시글 번호에 재접근해도 조회 수가
Spring 탄생 전에는 EJB라는 기술을 사용했었다 EJB의 문제점 너무 복잡하고 느림 EJB가 지원하는 인터페이스 구현해야 함 -> EJB에 종속적 코드가 지저분해짐 EJB를 사용하면 EJB에 의존적으로 코드를 작성해야 하기 때문에, POJO라는 개념이 등장
웹 서버와 웹 어플리케이션 서버에 관해 궁금한 것이 있어 알아보았다웹은 HTTP 기반으로 동작한다웹 브라우저에서 URL을 치고 접속하면, 인터넷을 통해서 해당 URL 서버에 요청을 하고 응답을 받아 웹 브라우저가 그려준다.이 때, 요청과 응답은 HTTP 프로토콜을 기반
서블릿 없었다면, 모든 것을 직접 구현해주었어야 한다.HTTP 메시지를 해석하고 비즈니스 로직을 처리하고 응답 메시지 만들어서 응답해주고 등등하지만 서블릿이 있으면 개발자는 비즈니스 로직에만 집중할 수 있다.HttpServletRequest를 통해 HTTP 요청 정보를
동시 요청 - 멀티 쓰레드를 잘 알고 있어야 트래픽 많은 서버를 잘 다룰 수 있다클라이언트가 서버에 요청을 하면,이런 흐름으로 진행된다.클라이언트가 서버로 요청하면 TCP/IP 연결 후, 서블릿 객체를 호출한다호출을 누가 할까??\-> 쓰레드!애플리케이션 코드를 하나하
HTML 생성이 어려움HTML 생성은 편리하지만, 비즈니스 로직까지 너무 많은 역할을 담당모델, 뷰, 컨트롤러로 역할을 나눠서 개발비즈니스 로직과, 뷰 로직을 분리@Controller서버 내장과거에는 서버에 WAS 직접 설치하고, 소스는 war 파일로 만들어서 설치한
HTTP 요청 데이터 HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법에는 3가지가 있다 GET - 쿼리 스트링(파라미터) URL 뒤에 쿼리 스트링에 데이터를 포함해서 서버에 전달하는 방식이다. EX) 검색, 필터, 페이징등에서 사용 PO
View를 반환하는 경우 정적 리소스 정적 리소스를 제공할 때는 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공한다. 동적 리소스 동적 HTML 페이지 데이터를 반환하는 경우 HTTP API HTML이 아니라 데이터를 전달하는 방식 주로 JS
서블릿과 JSP로 개발하는 데에 한계가 있다.서블릿으로 개발할 때는 뷰 화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여서 지저분하고 너무 복잡하며, JSP도 비즈니스 로직과 뷰 영역이 섞여 복잡하다이런 복잡함을 해소하기 위해 등장한 것인 MVC 패턴이다.비즈니스
FrontController는 컨트롤러의 앞단에서 클라이언트의 요청을 받고, 요청에 맞는 컨트롤러에 위임해주는 역할을 수행한다.또한, 공통 처리를 해서 각 컨트롤러마다 중복되는 코드를 줄여주는 역할도 수행한다.각 컨트롤러에 공통으로 처리되는 코드들이 중복으로 작성되어
Spring이 제공하는 서블릿 기반의 웹 개발을 위한 MVC 프레임워크Spring MVC의 Dispatcher Servlet이 Front Controller 패턴으로 구현되어 있다.스프링 부트는 Dispatcher Servlet을 서블릿으로 자동 등록하면서 모든 경로를
Handler(Controller)는 어떻게 호출할 수 있을까?\-> HandlerMapping과 HandlerAdapter가 필요하다.스프링 부트가 자동으로 HandlerMapping과 HandlerAdapter를 등록한다HandlerMapping에서 클라이언트 요청
배경 스프링 배치를 사용할 일이 생겼다. 하나의 Step에 로직을 전부 넣자니 복잡해지고, 분리에 필요성을 느껴서 분리하기로 했다. 근데 분리를 하면, 데이터를 다음 Step에 넘겨줄 수 있어야 했다. 2번이 실질적인 로직이고, 1번은 2번을 하기 위한 데이터를 마련
반환은 List형태인데, 잘못 표기되어서 보여진다Swagger를 사용해 반환형을 명시해주고 있는데, List형태는 어떻게 명시해주어야 하는지를 몰라서 찾아봤다변경 이전의 코드는 아래와 같다결론은 @ApiResponse의 content 부분을 수정해주면 해결된다@Arra
https://velog.io/@haerong22/Nexus%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EA%B4%80%EB%A6%AChttps:
https://isntyet.github.io/java/feign-client-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0/https://techblog.woowahan.com/2630/https://ve
https://velog.io/@hyun-jii/Spring-Cloud-Config-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95https://mangkyu.tistory.com
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.profiles