Programming 90

[TFAE] 게시판 조회수를 올리는 다양한 방법(Insert)

이 글이 쓰여진 이유를 보고 오시면 더욱 도움이 될 것 같다. TM 락을 해결하기 위한 방법 중의 하나는 Insert로 처리를 하는 것이다. 3부작으로 급조 기획된 이 글이 너무 급박하기 마무리 지어지는 느낌이 없지 않아있지만, 삽질할 시간을 아끼는 것도 중요하니 결론을 얘기하자면 제목과 위에도 언급된 Insert로 처리를 하는 것이다. 소스코드로 빠르게 알아보자 먼저, 기존의 소스 코드 먼저 보자. MyBatis ORM Framework로 작성한 구문은 다음과 같다. 다음은 Insert 구문으로 바꾼 구문이다. 생각보다 심플하죠? 너무 기본적인 INSERT 구문이기 때문이다. 여기서 중요한 건 그 이후의 Service 단과 View단에서 조회 시 어떤 데이터 값을 뿌려주냐에 달렸다. 순차적으로 보자. ..

[TFAE] 게시판 조회수를 올리는 다양한 방법(Update)

이 게시물은 개발을 시작하는 사람들이라면 누구나 한 번 쯤은 만들어봤을 '게시판'에 대한 내용이다. 그 중에서도 게시판이라는 하나의 서비스를 만들기 위해, 점점 살을 붙이고 붙여서 완성해가면서 한 번 쯤은 고려해봤을 조회수에 대한 내용이다. 먼저, 조회수란? 사용자가 게시물을 한 번 클릭할 때, 해당 게시물의 조회수를 1씩 증가시키는 동작이다. 비즈니스 로직에 따라 다르겠지만 간단하게 알고리즘화를 하자면 다음과 같을 것 같다. 클릭 > 해당 게시물의 조회수 칼럼에 1증가 Update > 게시물 내용 프론트로 뿌리기(제목, 저자, 날짜, 조회수 등) - UPDATE 구문을 통한 조회수 업데이트 클릭한 게시물 번호에 해당하는 게시물의 INQUIRY_CNT(조회수)칼럼에 1을 추가해주는 로직이다. 쿼리는 다음..

[MVC] HTML, HTTP API, CSR, SSR

* HTML - HTML 페이지 자체를 넘기는 것 * HTTP API - 데이터를 넘기는 것 - JSON * 백엔드 개발자가 서비스를 제공할 때 고민해야 할 사항 3 가지 - 정적 리소스를 어떻게 제공할 것인가 - 동적인 HTML 페이지를 어떻게 제공할 것인가 - HTTP API를 어떻게 제공할 것인가 * SSR ( Server Side Rendering ) - HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달 - 주로, 정적인 화면에 사용한다 - JSP, Thymeleaf * CSR ( Client Side Rendering ) - HTML 결과를 자바 스크립트를 사용하여 웹 브라우저에서 동적으로 생성해서 적용 - 주로 동적인 화면에 사용한다 - 구글 지도, 구글 캘린더

Programming/Spring 2022.06.20

[MVC] 동시요청 - 멀티쓰레드 (Multi-Thread)

* 배경 상황 : Http 요청 -> TCP/IP 연결 (Connection) -> 서블릿 객체 호출 이 때, 서블릿 객체를 호출하는 것은 무엇인가? 쓰레드다. * 쓰레드의 특징 - 애플리케이션 코드를 하나하나 순차적으로 실행하는 것이 쓰레드 - 예. 자바 main 메서드를 처음 실행하면 main 이라는 이름의 쓰레드가 실행 - 쓰레드는 한 번에 하나의 코드 라인만 실행 - 동시 처리가 필요하면 쓰레드를 추가로 생성 * 단일요청이라면? - 단일 요청이 왔다면 연결 시에 쓰레드를 하나 할당한 후, 서블릿을 호출해서 응답을 해주면 된다. * 근데 문제는 다중요청이라면? - 다중 요청(한 개 이상의 요청)시 한 개의 쓰레드를 점유하고 있기 때문에 다른 요청을 처리되지 못하고 대기하고 있게 되어 서비스 지연의 ..

Programming/Spring 2022.06.07

[JSP] JSP 웹 프로그램의 이해

* JSP : JAVA SERVER PAGE, HTML + JAVA * 자바를 잘 알아야한다. 선수지식 필수 * Model 1 동작방식 : 브라우저(클라이언트)의 요청(Request) -> JSP가 처리 -> DB 연동 후 -> JSP 처리 즉, 모든 처리를 JSP가 한다면 Model 1이다. EZ. * Model 1과 Model 2의 가장 큰 차이 : 고객의 요청(Request)을 누가 처리하는지 * Model 1은 고객의 정보를 JSP가 처리한다. * Model 2는 고객의 정보를 Servlet(Controller)이 처리한다. 여기서 Servlet이란 자바로 된 웹 페이지 기술이다. Pure JAVA * JSP는 HTML안에 쓰는 거고, Servlet은 JAVA 코드다. * 이제 Model 2를 쓰..

Programming/JSP 2022.03.21

[TFAE] 자바 main 메서드에서 static을 왜 쓰는걸까?

static으로 선언된 변수, 함수(메서드)는 자바 버츄얼 머신에서 인스턴스 객체의 생성없이 호출 할 수 있다. public class Test { public static void main(String[] args) { System.out.println("Hello, World"); } } static이 없으면 Test 객체를 생성해서 내부 함수인 main을 호출해야 한다. class는 공장, 공장에서 만들어진 것이 객체, 객체는 인스턴스(Instance) * 공장(Class)내에 사칙연산 메서드가 있다고 해보자. 덧셈, 뺄셈, 곱셈, 나눗셈 일반적인 메서드 사용법 : 공장에서 객체를 하나 생성함으로써 메서드를 사용할 수 있게끔 하는 것. 즉, 클래스에서 객체 생성 후 -> 메서드 사용 * static..

[TFAE] JAVA SE, EE, ME 차이가 뭐야?

자바면 자바지, SE는 뭐고 EE? 그리고 ME? 뭐지..라는 생각에 적어보는 오늘의 포스팅. 한 줄 요약 : 자바의 플랫폼 종류이고, 플랫폼 별(SE, EE, ME)로 사용하는 목적에 차이가 있다. 조금 더 자세히 알아보자. JAVA SE (Java Platform Standard Edition) 데스크톱, 서버, 임베디드시스템을 위한 표준 자바 플랫폼. 자바 가상머신 규격 및 API집합을 포함한다. JAVA EE,ME는 목적에 따라 SE를 기반으로 기존의 일부를 택하거나 API를 추가하여 구성된다. SE는 가장 일반적으로 사용된다. JDBC나 기본적인 기능이 모두 포함되어 있기 때문에 Android개발할때 주로 SE를 사용한다. JAVA EE (Java Platform EnterPrise Editio..

[TDD] 자바와 JUnit을 활용한 실용주의 단위 테스트 - 1

자바와 JUnit을 활용한 실용주의 단위 테스트 - YES24 『실용주의 프로그래머』의 앤디 헌트와 데이브 토마스가 알려주는실용주의 단위 테스트!클린 코드의 핵심인 단위 테스트, 어디서 어떻게 시작해야 할까? 책에서는 단위 테스트의 개념과 작성 www.yes24.com 책을 읽고, 코드를 리뷰하고 정리하기 위한 포스팅입니다. 왜 하는가? 근본적인 질문을 한 마디로 요약을 해보자면, 테스트 코드를 잘 만들 수 있어야 애플리케이션의 안정성을 확보할 수 있다. 예를 들어, 스프링 프로젝트에서 간단한 기능 하나를 추가했을 때 이 기능이 잘 동작하는지 일일이 톰캣 서버를 내렸다가 다시 켜고를 반복할 수는 없을 것이다. 그것도 규모가 조금 작은 프로젝트인 게시판, To-do list 만들기와 같은 환경에서나 통하는..

Programming/TDD 2022.02.21

[TFAE] 스프링부트 프로젝트 GitHub Action CI&CD연대기 - 2

[TFAE] 스프링부트 프로젝트 GitHub Action CI&CD연대기 - 1 현재의 상황 아일랜드에 거주하는 한국인 유학생들을 대상으로 한 거래 플랫폼을 제작중이다. 일명 아-거 . 열심히 코드를 작성하고, 이것 저것 테스트를 마치고 이제 세상에 선보여야 할 때가 supreme-ys.tistory.com 2편을 시작하기에 앞서서, 1편을 꼭 봐주시고 오시면 좋을 것 같네요! 지난 1편에서의 문제를 요약하자면 다음과 같다. - 깃헙에 application.properties, application.yml 파일을 업로드하면 안된다. - 그러면 파일을 제외하면 되잖아! - 그럼 빌드가 안되잖아. - 엌ㅋㅋ 미안 우리는 고민했다. 약 100시간이 넘는 시간동안. 고민했고, 많은 방법을 시도해보았다. 먼저, ..

[TFAE] 스프링부트 프로젝트 GitHub Action CI&CD연대기 - 1

현재의 상황 아일랜드에 거주하는 한국인 유학생들을 대상으로 한 거래 플랫폼을 제작중이다. 일명 아-거 . 열심히 코드를 작성하고, 이것 저것 테스트를 마치고 이제 세상에 선보여야 할 때가 왔다. 첫 번째 문제 만든 프로젝트가 세상에 나오려고 알을 깨려는데, 껍질이 꽤 두껍다. 배포가 잘 안되었다. 배포가 안되는 이유는 여러가지 이유가 있었다. 첫 째로, CI 도구의 선택이다. Jenkins, Travis, Circle CI 등등. 굉장히 많은 CI 도구들이 있었고, 어느 것을 선택해야 할지 몰랐다. 단 한 번도 써본적이 없었기 때문이다. 배포라고 해봤자, EC2에 Github Repository에서 가져온 다음 EC2 환경에서 빌드하는 수준? 딱 그 정도 였다. 물론, 이 것도 당시에는 굉장한 큰 기쁨으..