진짜 개발자
본문 바로가기

Application Knowhow (총 6개)

ApplicationKnowhow/Server - 게시판 조회수 기능 성능 최적화 이번 포스팅에서는, 일반적인 조회수 기능의 성능 향상을 고려해보는 시간을 갖도록 하겠습니다. 1. 조회수 기능 살펴보기 조회수는 어떤 글을 몇명의 사용자가 보았는지를 알려주는 것입니다. 방문자 수 또한 크게 보면 조회수와 같습니다. 언뜻보면, 조회수는 상당히 간단한 기능이기 때문에, 최적화가 필요할까? 성능향상이 필요할까? 싶기도합니다. 하지만 아주 작은 리소스를 소모하는 부분들일지라도, 잘못된 설계를 했고, 수많은 사용자들이 이용하다보면 매우 큰 문제로 이어지기도 합니다. 또한, 이렇게 작은 부분부터 하나 둘씩 성능 고려를 해두면, 나중에 정말 비즈니스상 크리티컬한 성능 문제가 야기 되었을때, 많은 도움이 되지 않을까요? 1.1 조회수 성능 최적화가 필요한 이유 및 필요한 부분 데이터베이스 잠금 첫번째..
ApplicationKnowhow/Server - 사용자 입력 값 검증방법과 노하우 검증 서버를 개발하며 그 동안 값 검증을 하면서 의문이 드는 점과, 노하우라면 노하우라 할 수 있는 얕은 지식을 공유 하려고 합니다. 1. Front-end에서 값 검증을 해서 넘겨주는데 Back-end에서도 해야하나요? A. 둘다 해야합니다. 프론트에서 하는 검증은 사용자의 경험을 위해서 해야하며, 백엔드에서는 프론트에서 전달받은 값이 중간에 변형될 우려가 있어 해야합니다. 2. 값 검증을 어느 계층에서 수행해야 하나요?A. 값이 처음 들어오는 곳에서 해야합니다.값 검증은, 데이터가 처음 들어오는 곳에서 한번 수행합니다. Layered Architecture를 예로 들자면, 사용자가 값을 입력하는 Presentation 계층에서 값 검증을 수행합니다. 추가적으로, Repository에서 가져온 ..
ApplicationKnowhow/Server - 공인 IP없이 외부에서 접속 가능하게 만들기(Ngrok란?) ngrok 이번 포스팅에서는, 로컬 컴퓨터에 public dns를 부여하여, 외부에서 접근할수 있게 만드는 Ngrok 의 사용방법에 대해 알아보도록 하겠습니다. 외부에서 로컬 PC에 접근해보기ngrok에 대해서만 궁금하신 분은 이단원은 넘어가셔도 됩니다. 우선 외부에서 로컬 pc에 접근할수 있도록 하는 방법에 알아보기 이전 간단한 네트워크 개념들을 살펴보겠습니다. Ngrok를 알려드리기 위한 포스팅이므로, 네트워크에 대한 자세한 내용은 생략하며 설명드리겠습니다. IPip는 간단히 말씀드려, Network에 연결된 각각의 Device들을 구분하기 위한 고유한 주소 같은 것입니다. 예를 들어 한국 사람들을 고유하게 구분하기위해, 주민등록 번호가 사용되듯이, 정보를 고유의 컴퓨터로 지정하여 수신 또는 발신하기..
ApplicationKnowhow/Server - Image와 Json을 함께 서버에 업로드하는 대표적 3가지 방법 Server에 이미지를 업로드하는 3가지 대표적인 방법 이번 포스팅에서는 Server에 파일과 함께 정보를 업로드(POST)하는 3가지 방법에대해 알아보도록 하겠습니다. 이외에 더 많은 좋은 방법들이 있다면, 댓글로 부탁드립니다 ~ File과 Json을 함께 서버에 전송해야 하는 경우서버를 개발하다보면, file을 업로드 해야하는 경우가 발생합니다. x@Controllerpublic class TestController { // file upload 처리 핸들러 @ResponseBody @PostMapping("/file") public void upload(@RequestParam("file") MultipartFile file) { System.out.pr..
ApplicationKnowhow - 불변객체란? (Immutable Object의 장점) 불변객체 이번 시간에는 불변객체에 대하 알아보도록 하겠습니다. 불변객체(Immutable Object)란?불변객체란 한번 객체가 생성되면, 변하지 않는 객체를 의미합니다. Java의 대표적인 불변객체는 String이 있습니다. 불변객체와 불변객체가 아닌 것불변객체xpublic class Team { private final String teamName; public Team(String teamName) { this.teamName = teamName; }}위의 객체는 불변객체입니다. 필드의 접근 제한자는 private이며, final 선언자를 통해 변수를 변경할 수 없도록 제한했습니다. (final 선언자가 부여된 필드의 경우, 생성자에서 최초 1회 초기화가 가능합니다.) 불변객체가 아닌 것들아래의 객..