전체 글
![[Django 웹 프로젝트] 트래픽 및 방문자 수 (2022.02.11 ~ 2022.03.12)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fec1epw%2FbtrvPeUySUe%2FKpU6FaxaFOhwHVvvL9KYfk%2Fimg.png)
[Django 웹 프로젝트] 트래픽 및 방문자 수 (2022.02.11 ~ 2022.03.12)
- 트래픽 한달간 총 9 만건의 요청 일 평균 3천건의 트래픽 점점 증가추세, 학교 내에서 입소문을 타기 시작한듯. 신입부원이 계속 늘어나고 있다. - 고유 방문자 수 한달 간 총 고유 방문자 1670명 30일 동안의 일일 고유 방문자 수는 총 2918 명 (77, 117,53,68,90,99,89,75,92,89,75,115,98,100,137,129,72,80,81,92,138,113,154,83,67,87,148,93,109,98) 하루 평균 고유 방문자 수는 약 97명 - 하루 평균 방문자 한명이 요청하는 평균 트래픽 건 수 = (하루 평균 트래픽) / (하루 평균 고유 방문자) = 약 3000 / 약 97 = 약 31 건 평균적으로 머무르는 시간은 5분이 채 안되는 것으로 추정되는 트래픽 숫자...
[Django 웹 프로젝트] 9. 소셜 로그인 관련 오류 수정 (2022-03-13)
[문제 상황1] (선조치 후분석) : 회원 A가 소셜로그인을 통해 회원가입을 진행했는데, 이메일만 None 으로 받아졌던 상황.(재현 실패) 입부 완료 메일을 보내지 못해서 서버 오류 로그가 나고 있었다. (대처) : 일단 빠르게 조치하기 위해 해당 회원의 이메일 값을 받아서 db 에 직접 넣어줬다. (분석) : 소셜로그인을 통해 받은 이메일 정보는 회원가입 중에 임의 수정할 수 없도록 설정해두었다. 그래서 회원 정보를 저장하는 중에 오류가 난 것으로는 보이지 않는다. 정보동의를 하지 않거나 이메일이 넘어오지 않으면 아예 회원가입을 할 수 없도록 해놨었기 때문에, 이메일이 없이 회원가입 페이지로 넘어가는 것도 이해가 잘 되지 않았다. - https://developers.naver.com/forum/po..
[Django 웹 프로젝트] 8. 점진적으로 api 로 교체 가능? (2021-11-21)
rest api 로의 전환 필요성 기존 Django 는 rest api 가 아니라, html 까지 렌더링하는 방식이다. 하지만 이 프로젝트는 크게 2가지의 문제상황을 마주하고 있다. 첫째로는 유지보수가 과연 가능할까? 라는 의문이다. 이전의 블로그 포스팅에서 정리되어있다. [Django 웹 프로젝트] 6. 유지 보수를 위한 새로운 아키텍처 고민 (2021-10-21) [Django 웹 프로젝트] 7. 유지 보수를 위한 새로운 인가인증 체계 고민 (2021-10-31) 두번째로 어플 제작을 기획 중에 있다는 점이다. 어플을 만들기 위해서는 hybrid app / web app / native 앱을 만들어야한다. 네이티브 앱 : SDK기반으로 개발된 애플리케이션. 모바일 플랫폼 API를 이용해 개발한다. 모..
![[도메인 주도 설계 철저 입문] 7. 의존 관계 제어](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAM4j8%2FbtrvAV9qAvm%2FoH7koWQzsGkTMDRK5MSmK1%2Fimg.png)
[도메인 주도 설계 철저 입문] 7. 의존 관계 제어
1) 의존이란 무엇인가? (1) ObjectA 가 ObjectB 에 의존하는 관계의 예 public class ObjectA { private ObjectB objectb; } ObjectA 는 ObjectB 를 참조한다. 다시말해 ObjectB 가 없으면 ObjectA 는 정의될 수 없다. 이 때 ObjectA 가 ObjectB 에 의존한다고 한다. (2) 구현체가 인터페이스에 의존하는 관계의 예 public interface UserRepository { User find(UserId id); } public class UserRepositoryImpl implements UserRepository { @Override public User find(UserId Id) { (...생략...) } } ..
![[Real MySQL 8.0] 4.1 MySQL 엔진 아키텍처](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCSoee%2FbtrvBmlujMw%2FNfeEO7wDgKF2gE2lGOYVh1%2Fimg.png)
[Real MySQL 8.0] 4.1 MySQL 엔진 아키텍처
4-1) MySQL 엔진 아키텍처.md GitHub Gist: instantly share code, notes, and snippets. gist.github.com
![[도메인 주도 설계 철저 입문] 6. 어플리케이션 서비스 - 도메인 서비스와의 분리!](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsrn91%2FbtrABKvv2h2%2FXPpDOzOKA2QwwWTz9Ydu30%2Fimg.jpg)
[도메인 주도 설계 철저 입문] 6. 어플리케이션 서비스 - 도메인 서비스와의 분리!
이 글을 읽고 깨달아,, 적용한 커밋. 아래 PR 중에 있다. [refactor/member] 회원 서비스 리팩토링 by Dong-Hyeon-Yu · Pull Request #94 · InhaBas/Inhabas.com-api 학년 정보 없애기 학기 -> 기수 중복검사로직을 도메인 영역으로 분리 (링크) 회원가입 서비스 리팩토링 회원종류 생성 #93 회원가입 가능 기간 및 인터뷰 기간 db 설정 기능 추가 팀 생성 #77 resolve github.com 이 책에서 말하는 서비스는 크게 두가지로 나뉘는 듯 하다. 하나는 도메인 서비스, 다른 하나는 어플리케이션 서비스. 도메인의 특성에 관한 활동은 도메인 서비스. 클라이언트에게 제공할 UseCase 에 대한 활동은 어플리케이션 서비스. 기존에는 layer..
![[Spring boot] 5. 멀티모듈? MSA? 좋은 아키텍쳐가 뭐야?!](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5olUV%2FbtrvlyndVoz%2FVKzPgEOmuZcMo6KbmsugbK%2Fimg.png)
[Spring boot] 5. 멀티모듈? MSA? 좋은 아키텍쳐가 뭐야?!
프로젝트 구조 변경을 고민하게 된 배경이 몇가지 있다. (1) layer 는 구분이 가지만, 파일이 많아져서 해당 layer 안의 특정 도메인을 한눈에 찾기가 어려워지고 있다. 또 그렇다보니 어떤 도메인 모델이 어떤 service 와 controller 로 이어지는지 알기도 힘들어질 것 같았다. 특히 새로운 개발자가 들어왔을때는 확실히 눈에 안보일 거 같았다. (2) 또 파일 업로드 및 다운로드를 동료 개발자가 맡아서 처리하고 있는데, 해당 기능은 완전히 독립적인 서비스로 빠져도 될 것 같다는 생각이 들었다. (원격 서버에 실제 파일을 업로드하고 다운로드 하게 해주는 파일 서버). 같은 모듈 내에 있는 것보다는, 적어도 다른 모듈로 독립적으로 구성할 필요가 있다. (3) 빅데이터 및 ML 동아리이기 때문..
[Java의 정석] 06. 객체지향 프로그래밍
모르는 것만 짧고 빠르게 정리한 노트입니다. 4.5 가변인자(varargs)와 오버로딩 기존에는 메서드의 매개변수 개수가 고정적이었으나, JDK1.5 부터 동적으로 지정해 줄 수 있게 되었다. '타입... 변수명' 과 같은 형식응로 선언. 매개변수 중에서 가장 마지막에 선언해야 한다. (컴파일러의 매개변수 매핑 로직인듯하다.) 인자가 아예 할당되지 않을 수도 있고, 배열이 포함될 수도 있다. public PrintStream(String format, Object... args); 여러개의 문자열을 타입으로 받는 메서드를 생각해보자. 아래와 같이 두가지 버전으로 작성할 수 있다. //1st String concatenate(String... str) {...} //2nd String concatenate..