백오피스의 신규기능을 추가해달라는 운영팀의 요구사항이 들어와서 해당기능을 구현했다. 해당 기능은 상세페이지에서 해당 내용과 관련된 파일들을 S3에 업로드하는 기능이었는데 파일의 용량은 적었지만 갯수가 최대 15개까지 업로드가 되야했다. 문제는 파일을 업로드 하고 업로드된 파일을 서버에 전송할 때 서버에서 처리하는 시간이 2 ~ 2.5초 내외로 걸리다 보니 바로 응답이 오지 않아 운영팀에서는 로딩바를 추가해달라고 요청이 들어왔다. 하지만 나는 백엔드 개발자다보니 로딩바를 추가하는 것 보다 서버에서 처리속도를 개선하고 싶어서 어떻게 하면 빨리 처리될 수 있을까 고민을 하다가 비동기 방식의 멀티쓰레드를 이용해서 처리하면 아무래도 하나의 쓰레드로 모든 요청을 처리하는 것 보단 시간이 오래걸리는 작업들은 별도 쓰..
MongoDB는 Collection에 데이터를 생성, 조회, 삭제, 수정할 수 있는 명령어를 지원하고 JavaScript처럼 변수에 데이터를 할당해서 저장할 수 있다. 먼저 insert에 대해 다뤄보자. insert 명령어는 3가지를 제공한다. insert - 단일 or 다중의 Document를 생성 insertOne - 단일 Document를 생성 insertMany - 다중의 Document를 생성 Collection 데이터 저장하기 object = {"name":"kimjonghyun", "age":28} db.developers.insert(object) db.developers.find() object 변수에 이름과 나이를 저장 후 insert함수 인자로 넘겨 insert를 실행하고 조회한 결과..
이번장에는 MongoDB에서 Database와 Collection을 다루는 기본적인 명령어를 알아보자. Database 생성 use 데이터베이스명 생성할 데이터베이스명을 입력한다. 생성 후 해당 데이터베이스를 바라보게 된다. Database 조회 (1) db 현재 연결된 데이터베이스명을 출력한다. Database 조회 (2) show dbs 존재하는 데이터베이스 목록을 출력한다. 위 목록에서 생성된 데이터베이스가 나오지 않은 이유는 컬렉션이 존재하지 않기 때문이다. Collection 생성 db.createCollection("생성할 컬렉션 명"); 생성할 컬렉션 명을 입력한다. RDBMS에서는 테이블 생성과 같은 개념이다. 다시한번 show dbs 명렁어를 실행하니 생성된 컬렉션이 출력되었다. Coll..
JAVA로 Thread 관련 프로그래밍을 학습하다보면 start() 메서드와 run() 메서드를 보게되는데 두 메서드를 실행하게되면 Thread의 run() 메서드를 실행하게 된다. 다만 이 두 메서드의 동작방식을 제대로 이해하지 못하고 사용하면 프로그램이 원치않게 실행 될 수 있다. 이 두 메서드의 동작방식의 차이를 한번 살펴보자. Thread.start() main 메서드에 현재 실행된 Thread 이름을 출력하고 Thread 인스턴스를 5개 생성한다. 인스턴스 생성시 생성자로 Runnable 타입을 주입해준 후 start() 메서드를 실행하였다. 출력결과로 main Thread와 Thread 인스턴스 5개가 출력된 걸 확인할 수 있다. Thread.run() 이번에는 run() 메서드를 실행해보았다..
이번에는 AWS RDS 인스턴스를 생성해보자. RDS에 대해 잘 모른다면 아래링크를 참조하자. https://aws.amazon.com/ko/rds/ AWS 콘솔접속 AWS에 로그인하여 콘솔화면 검색창에 RDS를 검색해서 들어간다. AWS RDS 인스턴스 생성 데이터베이스 생성버튼을 눌러준다. 손쉬운 생성을 선택하게되면 DB엔진만 선택 후 RDS 인스턴스를 생성할 수 있으며 추가설정은 인스턴스 생성이후에 가능하다. 이 글에서는 설정들에 대한 정보를 알아보기 위해 표준생성을 선택한다. 연습용이기 때문에 프리티어를 선택한다. DB 인스턴스 식별자는 AWS 계정이 소유하는 모든 DB 인스턴스에 대한 고유이름을 작성한다. 마스터 사용자 이름과 암호는 DB 인스턴스생성 후 접속하기위한 마스터 접속정보를 적는다. ..
Spring Boot로 애플리케이션을 개발하다보면 데이터베이스 접속정보, AWS accessKey와 secretKey 등 중요한 정보는 application.properties(yml)에 값을 세팅하고 개발하게되는데 이런 정보들이 그대로 노출되면 위험하기 때문에 외부에서 애플리케이션을 실행할 때 넣어주는게 안전하다. 테스트할 코드 작성 해당코드는 application.properties에 secret-key라는 key값에 임의의 값을 세팅하고 Controller에서 @Value 어노테이션으로 해당값을 주입받아서 Get 요청을 보내면 그 값을 리턴한다. 이제 해당 값을 외부에서 주입해보자 Command line arguments application.properties에 secret-key라는 key값엔 ..