간혹 웹 인터페이스를 가진 로컬 전용 서버 애플리케이션을 만들고 싶을 때, 사용자가 서버를 시작하면 localhost 브라우저를 자동으로 실행시키고 싶을 때가 있다. (ex. Jenkins 서버 실행 시 자동으로 브라우저로 접속 됨) 스프링 부트에서는 객체 하나를 만들어서 컴포넌트로 등록하고, 해당 빈이 생성되었을 때 실행되게끔 @PostConstruct 어노테이션을 메서드에 붙혀준다. 그리고 로컬 기본 브라우저로 해당 URL에 접속하게끔 한다. System.setProperty("java.awt.headless", "false"); 이 부분을 생략하면 HeadlessException이 발생하기 때문에 넣어준다.
대외활동을 졸업하기 전에 좀 해보고 싶다는 생각이 있었는데, 원티드에서 DDD (Dynamic Developer Designer) 8기 동아리 회원을 모집한다는 글을 보고 바로 (하루전에) 지원했다! 서류 합격 구글 설문조사로 간단하게 경험이나 기술스택, 자기소개 등을 작성하고 깃허브, 블로그 링크를 첨부했다. 프로젝트를 진행하면서 느꼈던 어려움을 어떻게 해결했는지 적는 란이 있어서 팀 프로젝트을 시작할때 자바와 코틀린 어느 언어로 도입해야할지 설득했던 사례를 적어서 제출했다. (이는 나중에 면접에서 물어보셨다.) 면접 면접은 구글 meet으로 서버파트 운영진 2분, 지원자 2분 진행됐었고 시간은 대략 30여분 정도 봤던 것 같다. 질문을 주시면 지원자가 번갈아가면서 답변하는 형식이었는데, 알고보니 다른..
보통 로깅을 할 때, 개발을 하다 보면 운영차원에서 System.out.println() 대신 로깅 라이브러리를 사용하도록 권장한다. 왜 그런지 알아보자. 동기화로 인한 성능 저하 println() 함수 내부를 들여다 보면, 이 처럼 write() 함수가 synchronized 블록으로 구성되어 있음을 확인 할 수 있다. 이는 멀티쓰레드 환경에서 write()를 호출할 때, 동기화 되어 한 쓰레드씩만 처리가 가능하고 다른 쓰레드들은 화면에 찍는 과정을 기다리게 된다. (Blocking) 따라서 이 과정에서 많은 수의 요청을 동시 처리하고자 할 때, 성능 저하가 발생할 수 있다. + 연산의 비효율성 문자열에 변수를 포함하기 위해서 + 연산자를 활용하여 다음과 같이 사용한다. mopil = 25를 출력하고 ..
문득 MySQL에서 진짜 데이터를 어디에, 어떻게 저장하는지 궁금해서 찾아봤다. MySQL 데이터 저장 위치 조회 SQL로 show variables like 'datadir'; 을 입력하면 value로 MySQL 데이터가 어떤 위치에 저장되고 있는지 보여준다. 그냥 경로를 확인하고 싶어서 로컬 MySQL로 확인했다. 데이터가 저장되는 방식 해당 위치로 이동해보면 스키마와 동일한 폴더가 하나 있고, 폴더 내부에는 .ibd 확장자 파일의 엔티티들이 존재하는걸 확인할 수 있다. 찾아보니 이런 뜻이라고 한다. 결국 MySQL 데이터도 파일 형태로 저장되는 것을 확인할 수 있었다. MySQL Server가 해당 데이터를 관리하면서 Workbench같은 GUI를 통해 사용자 인터페이스를 제공하는 구조다.
데이터베이스 개념은 매우 딥하지만, 백엔드 개발을 막 시작하여 프로젝트에 투입되어야 하는데 DB에 대한 지식이 별로 없을때 도움이 될 수 있도록 작성한 글이다. 데이터베이스(DB)란? "많은 기능을 해주는 고성능의" 엑셀 이다. 데이터베이스는 말 그대로 데이터를 저장하는 공간을 말한다. 여러분들이 쇼핑몰을 운영한다고 가정해보자. 쇼핑몰에 회원이 가입했고, 회원정보 (이름, 나이)를 저장해야하는데 어디다 저장할 것인가? 메모장에 적어놔도 되지만, 보통 이럴땐 데이터베이스에 정보를 저장한다. DBMS (Database Management System) 데이터베이스를 관리해주는 소프트웨어 우리가 흔히 말하는 DB는 이 DBMS를 말하는 것이다. DBMS는 사용자와 DB간의 소통의 창구 역할을 하는 중간 다리 ..
*Spring Boot를 주력으로 사용하는 입장에서 평가한 굉장히 주관적인 평입니다. 2024. 01. 01 업데이트 타입 안정성 (Spring Boot > FastAPI) 강타입 언어인 JVM 계열보다, 약타입 인터프리터 언어인 파이썬이 훨씬 약하고 불편했다. 물론 pydantic과 type hinting을 지원하지만, 그래도 2% 부족한 면이 느껴졌다. IDE 자동완성의 아쉬움 파이썬은 라이브러리가 동적으로 생성해 내는 함수나 클래스일 경우, IDE의 자동완성을 사용할 수 없어서 매우 불편했다. 레퍼런스 (Spring Boot > FastAPI) 이 글을 최초 작성할 땐, FastAPI 관련 한글 레퍼런스 (블로그 정리 글)이 매우 적었었는데, 24.01.01 기준 꽤 많이 늘어났음을 느낄 수 있었다..
# 서론 예를들어 AWS S3를 통해 이미지를 업로드 하는 기능이 있다고 했을때, 서버 로직은 일단 1. 이미지 파일을 로컬(서버) 디렉토리에 임시 저장한다. 2. 이 임시 저장한 파일을 S3에 업로드 한다. 3. 임시 저장한 파일을 삭제한다. 로 진행된다. 이때 Docker 이미지를 통해서 서버를 컨테이너 방식으로 띄웠을 때 살짝 문제가 발생할 수 있는데, Docker 컨테이너 내부에 임시 저장 디렉토리가 없어서 No Such File or directory 에러를 맞이할 수 있다. 이럴 때는, Dockerfile에 이미지를 빌드할때 임시 디렉토리도 같이 생성해주는 명령어를 추가해주면 해결된다. RUN mkdir -p temp 명령어를 추가한다. *-p 옵션을 줘야 잘 작동한다.