시작하며 f-lab 멘토링을 시작한지 어느덧 2개월이 지났다. 이제 프로젝트를 해야하는데 CI/CD를 구성하며 배포 스크립트를 구성하며 잘 모르는 내용들이 많아 정리를 해보려고 한다. 회사에서는 AWS의 Elastic Beanstalk를 사용해서 배포 스크립트를 작성할 필요가 없없는데 프로젝트에서는 ncloud 서버를 이용하기 때문에 배포 스크립트를 작성해주어야 했다. 배포 스크립트 echo "> write-now pid 확인" JAR_PATH=/deploy CURRENT_PID=$(ps -ef | grep java | grep write-now | grep -v nohup | awk '{print $2}') echo "$CURRENT_PID" if [ $CURRENT_PID -z ]; then echo..
Micrometer 스프링부트 어플리케이션을 구동하면 기본적으로 JAVA 환경에서 돌아가기 때문에 jvm에 관한 정보도 있고 HTTP 통신에 대한 정보, 시스템 환경에 대한 정보 등 다양한 metric 정보들이 생산된다. 우리가 이런 metric 정보를 모니터링 하기 위해서는 모니터링 툴에 맞는 형식으로 정보를 맞춰줘야 하고 또 모니터링 툴에 맞는 API로 전송해야 한다. 이런 것들을 개발자가 모두 제어하기는 어려운 일이다. 이런 작업을 추상화한 것이 Micrometer이다. Micrometer를 이용하면 표준 수집형식에 맞게 자동적으로 metric 정보가 수집되고 모니터링 툴에 맞게끔 세팅, 전송하는 역할은 Micrometer의 구현체를 이용할 수 있다. 스프링부트 엑추에이터 스프링부트 엑추에이터는 스..
발단 f-lab 멘토링을 하면서 HTTP status code에 대한 얘기가 나왔다. 멘토님의 질문은 다음과 같았다. "데이터가 없음"을 나타내는 상태코드는 무엇일까? 나는 해당 질문에 대해 500이라 답했다. 부끄러운 일이지만 그간 회사에서 거의 혼자 일을 하며 기능 개발에 급급한 나머지 HTTP 요청에 대해 status code는 어떤 상황에 어떤 code로 반환할지 등 기본적인 HTTP 통신에 대한 고려는 잘하지 못하였다. 이번 기회에 HTTP 자체에 대한 기본적인 정리를 해보고 자주 사용하는 status code에 대해 정리해보고자 한다. HTTP란? HTTP에 대해서는 워낙 많은 자료들이 있어서 이해하는데 어렵진 않을 것이다. HTTP는 HyperText Transfer Protocol의 약자로..
의문 최범균의 JSP 2.3 웹 프로그래밍: 기초부터 중급까지 위 책의 세션에 해당하는 내용을 공부하다가 이런 내용이 있었다. 컨텍스트 경로가 다르면 session 객체도 다르다. 그리고 책에 예시처럼 실제 경로를 다르게 하여 비교해보니 세션에 대한 키 값이 저장된 브라우저의 쿠키 값이 달랐다. 구체적으로 왜 이런 현상이 발생하는지 궁금하여 짧지만 글로 작성해보았다. 서블릿 서블릿이란 무엇인가? 초기 웹은 단순히 정적인 웹 페이지를 보여주는 것에 그쳤다. 하지만 기술이 발전하고 사용자들의 요구수준이 높아지면서 동적인 웹 페이지를 제공할 필요성이 대두됐다. JAVA에서 이를 위해 사용하는 것이 바로 서블릿이다. 서블릿은 클라이언트에서 온 HTTP 요청을 적절히 처리해 다시 클라이언트로 반환하는 역할을 수행..
1.1 초난감 DAO DAO란? Data Access Object의 줄임말로 DB에 접근해 데이터를 조회하거나 저장하는 등의 역할을 수행하는 객체를 의미한다. //UserDao.java public void addUser(User user) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/toby_spring", "root", "xxx"); PreparedStatement ps = connection.prepareStatement("insert into us..
Cache란? 예를 들어 회원 정보를 가져오는 API가 있다고 해보자. 회원 정보는 DB에 있으므로 정보를 가져오기 위해선 DB에 sql을 날려 조회해야 한다. 조회 요청이 자주 일어나지 않는다면 별 문제가 없겠지만 자주 일어난다면 DB 커넥션을 가져오고 해제하는 과정 등 회원 정보를 가져오기 위한 부가적인 작업들을 반복적으로 수행하게 된다. 이 때 사용할 수 있는 게 Cache이다. 한번 조회했던 회원 정보를 일정 기간 Cache로 보관하여 요청이 왔을 때 DB에 접근하지 않고 해당 정보를 반환해주면 된다. 즉 Cache를 이용하면 성능 개선을 할 수 있다. 다만 Cache를 이용할 때 주의해야 할 점이 있다. 만약 회원 정보가 실시간으로 바뀌는 것이고 이를 실시간으로 조회해야 한다면 Cache 정보는..