스프링 8

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

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

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

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

Programming/Spring 2022.06.07

[Spring] 스프링 빈 조회

스프링 빈을 조회하는 다양한 방법에 대해 코드로 살펴보자. * BeanFactory BeanFactory는 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 메서드를 제공한다. * ApplicationContext BeanFactory의 기능을 모두 상속받아서 사용한다. ApplicationContext가 BeanFactory를 상속받아서 사용한다면 그 둘의 차이에 대해 알아보자. ApplicationContext는 BeanFactory에서 제공하는 빈 관리, 조회 기능 뿐만 아니라 어플리케이션 개발에 필요한 부가 기능들을 제공한다. -> 국제화 기능, 환경 변수, 이벤트, 리소스 조회 등등! 즉, ApplicationContext = BeanFacto..

Programming/Spring 2022.02.07

[Spring] ApplicationContext, 스프링 컨테이너, 스프링 빈(Bean)

프로젝트를 제작하면서, 기존에 인X런에서 배웠던 내용들을 다시 리마인드하는 작업을 하고 있다. 이거 굉장히 좋은 학습 방법인 것 같다. 아주 착착 감긴다. 어떤 느낌이냐면, 흩어진 지식들을 연결하는 느낌이다. 하드 코딩으로 필요한 기능을 추추추추추추추가 하며 무슨 내용인지도 모르고 '그냥 기능만 잘 동작하면 되지' 라는 마인드로 개발을 진행했었다. 이 어노테이션(@)이 왜 쓰이고, 무엇 때문에 쓰이고 어느 부분에선 왜 이런 어노테이션이 쓰이는지 그 이유를 알 수 있는 공부 방법이라고 생각한다. 그래서 뿔뿔이 흩어져있는 지식들을 연결하기 위한 정리들을 시작하는 중이다. 그 첫 번째는 ApplicationContext이다. 스프링을 한 번이라도 접해봤다면 ApplicatioContext를 들어는 봤을 것이다..

Programming/Spring 2022.02.06

[스프링의 정석] HTTP 요청과 응답

1. 로컬에서의 요청과 실행 아래의 코드는 간단하게 연,월,일을 입력하면 요일을 알려주는 프로그램이다. package com.fastcampus.ch2; import java.util.Calendar; // 연, 월, 일을 입력하면 요일을 알려주는 프로그램 public class YoilTeller { public static void main(String[] args) { // 1. 입력 String year = args[0]; String month = args[1]; String day = args[2]; int yyyy = Integer.parseInt(year); int mm = Integer.parseInt(month); int dd = Integer.parseInt(day); // 2. 작업..

Programming/Spring 2021.10.27

[스프링의 정석] Spring MVC - 원격 프로그램의 실행

* 프로그램을 어떻게 실행시킬까? // 로컬 프로그램의 실행 public class Main { public static void main(String[] args) { System.out.println("Hello"); } } - CLI창에서 java Main 명령어를 통해 자바 인터프리터를 실행시켜 Main 클래스를 실행시킵니다. * 자바 인터프리터는 어떻게 main메서드를 호출할 수 있을까? - main메서드가 static이기 때문에 호출이 가능합니다. static이 아니면 객체를 생성해야 합니다. * 그렇다면 원격 프로그램은 어떻게 실행시킬 수 있을까? - 브라우저, WAS(톰캣)을 통해 실행시킬 수 있습니다. - 하지만 WAS가 실행되려면 먼저 프로그램을 등록하고 프로그램이 특정 호출로 인해 실..

Programming/Spring 2021.10.26

[스프링의 정석] 개발 도구 소개

스프링의 정석 강의 수강을 위한 준비 사항입니다. * 자바의 스펙 1. SE : Standard Edition, 가장 일반적인 에디션 2. EE : Enterprise Edition, 서버용 3. ME : Micro Edition, 소형기기용 * 자바 개발 도구 : JAVA 11 버전부터 Oracle JDK가 Open JDK로 편입됨. 1. Oracle JDK 2. Open JDK * 통합개발 환경 : IDE (Integrated Development Environment) 1. STS3 : Eclipse + Spring 플러그인, STS4는 Spring boot 개발용이므로 3버전 다운로드 -> 다운로드 링크(https://github.com/spring-projects/toolsuite-distrib..

Programming/Spring 2021.10.13

[Spring] @Entity @Id @GeneratedValue @Column 코드 뜯기

Spring 공부를 하다보면 @ 골뱅이라 불리는 Annotation을 심심치 않게, 아니 자주 볼 수 있습니다. 성격상 이것에 대해 대충 넘긴다면 개발에 활용할 수 없을 것 같다는 생각이 들었고, 예제 코드를 작성해서 작성의도, 작성의미 등을 하나 하나 자세히 뜯어보는 포스팅을 올려보려고 합니다. 오늘 뜯어볼 코드는 @Entity, @Id, @GeneratedValue, @Column 입니다. import javax.persistence.*; import java.io.Serializable; @Entity public class User implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(nullabl..

Programming/Spring 2021.07.02