전체 글

우아한테크코스 5기 테오입니다.
우테코 5기

[하루스터디] 어드민 페이지 개발하기 - 기본적인 통계 기능 구현

현재는 데이터 조회를 위해 매번 데이터베이스에 접근해야 하는 구조입니다. 또한 데이터베이스는 인바운드 네트워크 설정으로 인해서 우테코 캠퍼스에서만 접근이 가능한 상태입니다. 따라서 어드민 페이지에서 데이터 조회를 지원한다면 어디에서든지 쉽게 데이터를 확인할 수 있을 것입니다. Spring Data의 Pageable 사용하기 Spring Data의 Pageable을 활용하면 페이징 기반의 조회를 손쉽게 구성할 수 있습니다. @GetMapping("/members") public ResponseEntity findMembers(Pageable pageable) { List members = adminService.findMembers(pageable); return ResponseEntity.ok(membe..

우테코 5기

[하루스터디] 어드민 페이지 개발하기 - 로그인 구현

메인 어드민 기능을 개발하기에 앞서 로그인을 구현해보고자 합니다. 어드민 페이지에 접근할 수 있는 사용자는 하루스터디 개발자들로 제한되어야 하기 때문에 로그인 기능은 필수적이라 할 수 있겠습니다. 기존 인증 시스템 재사용하기? 하루스터디는 Oauth2 기반의 인증 시스템을 사용합니다. 사용자가 소셜 로그인을 진행하면 해당 정보를 기반으로 인가용 access token을 발급하는 구조입니다. 이런 기존 인증 시스템을 사용할 순 없을지 고민이 되었습니다. 투자하는 리소스를 최소화 시킬 수 있으면서 구현 방식또한 간단하리라 예측했기 때문입니다. 하루스터디 서비스에 소셜 로그인을 하게 되면 사용자는 ID를 갖게 됩니다. 그리고 이는 Member 테이블의 Primay Key입니다. 예를 들어 구글 로그인을 진행하..

우테코 5기

[하루스터디]어드민 페이지 개발하기 - 요구사항 분석

본격적인 사용자 유치에 들어서면서 모니터링 및 분석 도구의 필요성이 대두되었고 어드민 페이지를 개발하게 되었습니다. 실제 개발에 들어가기 앞서, 어떤 기능이 필요할지 대략적으로 분석하고자 합니다. 브레인스토밍 브레인스토밍을 할 때 주의 깊게 생각한 부분은 다음과 같습니다. 어드민 기능을 사용하는 고객은 사용자들이 아닌 하루스터디 개발자들이다. 어드민에서 제공하는 통계 정보는 유의미한 분석 결과를 만들어내는데 도움이 될 수 있어야 한다. 최근 하루스터디는 사용자 통계 정보를 기반으로 기능을 개선하고 있기에 어드민에서 중점적으로 다뤄야 할 내용도 일단은 통계 정보라고 생각했습니다. 따라서 브레인스토밍 내용은 '어떤 통계 자료를 뽑을 것인지'가 주가 되었습니다. 외부로 드러나는 정보, 예를 들어 어떤 페이지에..

우테코 5기

[레벨 4 회고] 하루스터디 사용자 유치 기록 - 1

5차 데모데이를 마친 직후부터 하루스터디는 사용자 유치에 많이 집중하게 되었는데요, 이 과정을 기록하고 싶어 앞으로는 매주 사용자 유치에 과정과 결과를 회고 형식으로 작성할 예정입니다 😌 공식 오픈카톡방 운영하기 첫번째로 했던 사용자 유치 방법은 오픈카톡방을 운영하는 것이었습니다. 하루스터디는 혼자서도 진행할 수 있지만 기본적으로 여러 명이 진행하는 것을 전제로 만든 서비스이기 때문에 사용자 풀을 유지시킬 수 있는 수단이 필요하다고 생각했습니다. 그래서 공식 오픈카톡방을 개설하고, 하루스터디 사이트에서 쉽게 접근이 가능하도록 구성했습니다. 하루스터디 사이트에 들어가게 되면 우측 하단의 카카오톡 버튼을 통해 쉽게 오픈카톡방으로 이동할 수 있습니다. 오픈카톡방에서는 각자 자유롭게 스터디 참여코드를 올리고, ..

Database

DDL과 트랜잭션, 그리고 Atomic DDL

협업 프로젝트 과정에서 새로운 버전을 배포하기 위한 작업을 하던 도중이었습니다. MySQL 이벤트를 통해 스키마 변경 및 데이터 조작을 진행하고자 하였고, 다음과 같은 스크립트를 작성했습니다. delimiter && create event if not exists v_1_1_1 ON SCHEDULE AT '2023-09-21 04:00:00' DO BEGIN set autocommit = false; # DDL rename table pomodoro_room to pomodoro_study; alter table participant_code add column pomodoro_study_id bigint not null; update participant_code join pomodoro_study o..

Spring

CGI에서부터 Spring에 이르기까지

현재 스프링 구조에 대한 학습을 진행하고 있습니다. 백엔드 개발을 하면서 다양한 스프링 지원기술들을 사용해왔지만, 정작 이 기술들이 왜 생겨나게 되었는지, 스프링은 왜 등장했는지에 대해 명확히 이해하지 못했던 것 같습니다. 따라서 이번 아티클을 통해 스프링의 등장 배경을 정리해보도록 하겠습니다. 들어가면서 사실 스프링이 등장하기까지는 많은 발전 과정이 존재했습니다. 초기 WWW 모델을 거쳐 CGI, Servlet, JSP 기술이 등장한 뒤에서야 스프링이 등장하게 되었습니다. 그렇다면 스프링은 어떤 문제를 해결하기 위해 등장한걸까요? CGI, Servlet, JSP의 특징을 알아보면서 스프링이 등장하게 되었던 당위성을 이해해보고자 합니다. CGI WWW이 발전함에 따라, 정적 웹페이지가 아닌 동적 웹페이지..

Spring

Servlet Filter란?

사용자의 요청이 발생하면 서블릿에 도달하여 적절한 형태로 처리됩니다. 하지만 여러 서블릿에서 공통적으로 처리하고 싶은 작업이 있을 수 있습니다. 그렇다면 매번 중복 로직을 각각의 서블릿에 작성해주어야 할까요? 이를 해결하기 위해 서블릿 API 2.3부터는 필터(Filter)라는 기능을 지원합니다. 필터는 HTTP 요청 및 응답에 대해 쉽게 전/후 처리를 할 수 있는 기술입니다. 예를 들어 HTTP 요청 및 응답에 공통적으로 어떤 헤더를 삽입하고 싶다면 필터를 사용할 수 있습니다. 필터 사용 예시 필터는 다음과 같은 기능들을 구현하는데 주로 사용되곤 합니다. 인증 필터 로깅 및 감시(Auditing) 필터 이미지 변환 필터 데이터 압축 필터 암호화 필터 필터 인터페이스 필터를 사용하고자 한다면 javax...

Java

리플렉션이란? (+ @GetMapping 만들어보기)

리플렉션이란 구체적인 클래스 타입을 알지 못하더라도 해당 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API를 의미합니다. 리플렉션은 '반사'라는 의미를 가지는데, 클래스 정보를 마치 거울에 반사된 것처럼 확인할 수 있다는 점에서 리플렉션이라는 이름을 가지게 되었다고 합니다. 자바 코드는 컴파일되면 바이트코드로 변환됩니다. 그리고 이런 바이트코드들은 클래스로더를 통해 JVM 내 메모리 영역에 저장되게 됩니다. 리플렉션은 이런 JVM 메모리 영역으로부터 클래스 정보를 읽어 다양한 작업을 가능하게 해 줍니다. Spring을 사용하면 흔히 접하는 @RequestMapping, DI(Dependency Injection) 컨테이너, JPA의 @Entity까지 모두 리플렉션을 통해 만들어진 기..

우테코 5기

우아한테크코스 레벨 3 회고

조금은 늦게 작성하게 된 레벨 3 회고입니다.. 🥲 레벨 4에 들어서면서 이것저것 학습하게 되니 회고를 자꾸만 미루게 되는 것 같습니다. 아무튼 레벨 3에서는 무엇을 느꼈고, 무엇을 경험했는지 작성해보고자 합니다! 협업 프로젝트 시작 레벨 3에 들어서면서 협업 프로젝트를 시작하게 되었습니다. 저번 회고에서도 언급하긴 했지만 어쩌다 보니 제가 낸 기획이 뽑히게 되어서 '짧은 주제의 스터디를 쉽고 빠르게'라는 주제로 협업을 진행하게 되었습니다. 사실 협업 경험이 없는 건 아니지만 모두 학교 수업 시간에 진행되었던 협업이고 학점을 위한 팀플이었기 때문에 제대로 된 협업은 아니었던 것 같습니다. 그래서인지 우테코에서 진행하는 협업이 처음에는 굉장히 낯설게 느껴졌었습니다. 기획 단계에서부터 모르는 키워드가 쏟아져..

[Tomcat] maxThreads, maxConnections, acceptCount로 Tomcat 튜닝하기

우아한테크코스 레벨 4 미션을 진행하면서 Tomcat에 대한 학습을 진행하고 있습니다. 이 과정에서 accept count, max connection, max threads라는 키워드에 대해 알게 되었는데, 이번 아티클에서 개념과 사용법을 정리하고자 합니다. 들어가면서 max threads, accept count, max connection은 모두 HTTP 관련 Tomcat 속성입니다. 조금 더 디테일하게는 Tomcat의 여러 구성요소 중 HTTP Connector에 대한 속성입니다. 따라서 이런 속성 값들을 바꾸는 것은 HTTP Connector를 튜닝하는 것과 동일하다고 할 수 있겠습니다. HTTP Connector는 특정 포트에서 HTTP 1.1 연결을 수신하는 역할을 합니다. maxThread..

teo_99
테오의 학습기록