본문 바로가기

카테고리395

[Spring] 의존성 주입(DI)과 제어의 역전(IOC) 의존성 주입(DI) 이란? 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입시켜주는 방식. 걍 결합도를 느슨하게 만드는 것이다. How?? 객체를 직접 만들어서 사용하는게 아니라 주입받아서 사용한다. Spring에서 new 연산자를 안쓰는 이유가 바로 이것이다. 인터페이스 왼쪽과 같이 Ch라는 인터페이스 하나를 만들었다. 이 Ch에서는 cooking() 이라는 메소드를 가진다. 클래스 두 클래스에는 각각 일반요리사(Chef)와 짱쌘요리사(SuperChef)가 있다. 그리고 두 요리사 모두 cooking( ) 이라는 메소드를 Ch에게 상속받아 해당 메소드를 사용할 수 있다 식당(Restaurant)에서 요리할 줄아는 Ch를 고용했다. 일반요리사(Chef)와 짱쌘요리사(Chef)는 둘다 요리를 할줄 안.. 2023. 3. 15.
[Spring] 타임리프 사용해서 폼(form)만들기 - th:object, th:field 타임리프 , form에서 th를 사용하는 법 th:object를 쓰면 name 안넣어줘도 된다. th:field를 넣어준 이유는 테스트 해보기 위함이다. 자동으로 id와 name, value 3개의 값들을 보여준다. 하지만 check값과 radio는 value 속성에 값을 따로 지정해줘야한다. 그렇다면 checkbox와 radio는 어떤 값을 가질까? id와 name에만 값이 들어가고 value는 " " 과 같이 빈 값이 나타나기 때문에 따로 value 값을 넣어줘야한다. 이런식으로 쓸 수 있는 이유는 memberVO로 데이터가 넘어왔기 때문에 사용할 수 있으므로, 컨트롤에서 메소드의 매개변수에 MemberVO 커맨드 객체를 생성해줘야한다. MemberVO는 위 사진의 왼쪽에 보다시피 MemberVO 클.. 2023. 3. 15.
[Spring] 어노테이션 @RequestParam 과 @ModelAttribute @RequestParam 과 @ModelAttribute은 매개 변수에 어노테이션을 사용할 수 있다. 밑의 test 예제로 공부해보았다. @RequestParam test1 페이지 -> test2 페이지 타임리프 th:href 을 이용하여 java 데이터를 name이라는 이름으로 test2 컨트롤러에 넘긴다. 넘어오는 데이터를 받는 상세 방법 @RequestParam의 name은 넘어오는 데이터의 이름이다. 즉, name이라는 이름으로 넘어온 이름을 data로 적용시킬 수 있다. 따라서 data = java를 담고있다. test2 페이지 -> test3 페이지 test3로 이동. 여기서는 그냥 컨트롤러 이동만 해주고, 데이터는 안넘겨 줬다. @RequestParam의 required는 데이터를 필수로 받.. 2023. 3. 15.
[Spring] 스프링에서 Mybatis Oracle 데이터베이스 연동하기 1. 프로젝트 생성 시 SQL 체크항목 추가 2. application.properties 설정 쿼리가 실행되면 콘솔에 상세하게 뜨기 위해 위 두개를 주석처리하고 조금 수정했다. #xml location은 mappers 패키지 안에 *.xml로 끝나는 모든 파일 적용하는 것으로 설정해주었다. 3. build.gradle 코드 한줄 복사 implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16' //쿼리 로그 라이브러리 추가 쿼리 띄우려면 이 쿼리가 필요하다. 이후 해당 프로젝트 우클릭하여 Gradle -> Refresh Gradle을 해준다. 필요한 jar파일을 모두 가져와 읽어준다. 4. spring 로그소스 적용 해당 로그 소스 알집을 .. 2023. 3. 14.
[Spring] 스프링 form태그 이용해서 페이지 이동 컨트롤 안에 있는 총 3개의 Mapping과 템플릿 3개를 만들어 데이터를 주고 받도록 해보았다. VO 두개를 만들어 첫페이지에 있는 값을 두번째 페이지에 넘긴 후, 두번째 페이지에서 첫번째 값과 두번째 값을 담은 VO를 마지막 페이지에 넘긴다. 1. 컨트롤러를 만든다. src/main/java 폴더 밑에 controller 패키지를 만든 후 컨트롤러를 만든다. 이후 어노테이션(@)을 사용하여 Controller라는 것을 정의해주고, 경로를 앞에 하나 더추가하기 위해 @RequestMapping을 추가해준다. 2. Mapping 경로를 받아와 HTML 페이지로 이동시킨다. 앞에서 설정한 절대 경로 /board에 추가하여 /reg 라는 경로를 설정해주면, regMember.html이 열릴수 있도록 retu.. 2023. 3. 13.
[Spring] 스프링 프로젝트 생성 방법 및 데이터 전달 스프링에서 웹 개발을 하려면 프로젝트 생성을 이클립스와 또 다르게 만들어줘야한다. 우클릭 New -> Spring Starter Project를 선택한다. Frequently에서 위 4개는 필수이다. Spring Boot DevTools => 스프링을 수정하고 다시 Run안시키고 페이지를 F5누르면 바로바로 변화되는걸 볼 수있게 하는거다. 반드시 위와 같은 패키지에서 클래스 파일을 만들어주자. 프로젝트를 최초로 실행시킬 때에는 컨트롤 + F11이 아니라, 지정해서 해줘야한다. 위의 사진에서 @GetMapping 어노테이션 뒤에 경로를 지정해주었다. Spring은 메소드를 사용해서 컨트롤러 역할을 한다. 이것은 이클립스에서 사용했던 if문과 동일한 역할을 한다. 서블릿에서 사용했던 page가 return .. 2023. 3. 13.
[Spring] 스프링 설치 및 이클립스 개발 환경설정 -2 com.example.demo 패키지에서 새로운 클래스를 하나 만들어준다. 어노테이션 Controller를 만들고, 클래스 안에 어노테이션 GetMapping과 밑에 goMain() 메소드를 하나 만들어준다. 에러가 뜨면 Windows -> Preferences에서 검색창에 mark를 쳐서 Mark Occurrences를 들어온다. 이곳에서 맨 위에있는 체크박스를 해제한다. Spring Boot App을 Run 해주면 실행이된다. 혹은 com.example.demo 패키지에 DemoApplication.java를 Run 해주자. 위 태그를 아래에 있는 것으로 바꾸어준다. 태그에서 th: 자동완성 기능이 생기면 성공이다. Window -> Preferences .@qwertyuioplkjhgfdsazxcv.. 2023. 3. 13.
[Spring] 스프링 설치 및 이클립스 개발 환경설정 스프링(Spring)이란? - Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다. 애플리케이션 프레임 워크 - 애플리케이션을 개발하는데 있어 필요한 모든 업무 분야 및 모든 기술과 관련된 코드들의 뼈대를 제공한다. https://spring.io/ Spring | Home Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform. spring.io 먼저 Spring을 다운 받기 위해 위 홈페이지를 들어가자. 위 홈페이지에서 스크롤을 맨 밑으로 내리다보면 PROJECT WIKI 버튼이 있다. 클릭해서 들어가면 오른쪽에 Previ.. 2023. 3. 13.
[Oracle / SQL] MERGE INTO 사용방법 (두 테이블, 한 테이블 DUAL) MELON_CHART HTML 삽입 미리보기할 수 없는 소스 MELON_CHART_NEW HTML 삽입 미리보기할 수 없는 소스 MERGE INTO HTML 삽입 미리보기할 수 없는 소스 SELECT * FROM MELON_CHART; 위와 같이 MELON_CHART에 있는 값을 다시한번 조회하면 5개의 새로운 데이터가 추가된 것을 확인할 수 있다. ON 조건절에 MELON_CHART의 SINGER가 MELON_CHART_NEW의 SINGER와 같고, 노래가 같은 것을 조건으로 둔다. WHEN 일치하면, MELON_CHART_NEW의 랭킹을 MELON_CHART로 바꿔주고, REMARK 값을 CONTINUE로 업데이트 시킨다. WHEN NOT 일치하지 않다면, MELON_CHART_NEW의 RANKING.. 2023. 3. 9.
[JavaScript] 전체 체크박스 항목 선택 및 해제, 체크 여부 변경 See the Pen Untitled by ParkJooHong (@ParkJooHong) on CodePen. 이번에는 자바스크립트만을 이용하여 체크박스를 간편하게 전체 선택 또는 해제 하는 방법에 대해 알아보았다. 첫번째 이벤트로, 체크박스 전체 선택 및 전체 해제에 대한 방법을, 두번째 이벤트로, 내용부에 있는 체크박스에 따라 제목줄 체크박스 체크 여부 변경에 대해서 자세히 기술해보려고한다. 위와 같이 HTML을 짜주고, body 태그가 끝나기 전에 js를 연결시켜준다. 첫번째 이벤트 체크 박스 전체 선택 및 전체 해제 기능을 해볼 것이다. 일단 제목줄에 있는 체크 박스를 선택해서 가져와야 한다. 나는 id태그에 checkAll을 주어 js로 가지고 왔다. 이후 체크박스 클릭시 실행되는 이벤트를 추.. 2023. 3. 9.
[Oracle / SQL] 뷰(VIEW)의 정의와 생성하는 방법 뷰(VIEW) 란? 하나 이상의 기본 테이블이나 다른 뷰를 사용해 생성되는 가상의 테이블 공간이다. 모든 데이터에서 일부만 뽑아서 사용할 수도 있으며, 이때 뷰를 정의한 기본 테이블에서 무결성 제약조건은 유지된다. 뷰(VIEW)를 만들 수 있게 권한주는 방법 HTML 삽입 미리보기할 수 없는 소스 이는 SYSTEM 계정에서 뷰를 만들 수 있는 권한을 만들어주지 않아서 이다. SYSTEM모드로 가서 MYDB에 뷰를 만들 수 있는 권한을 만들어준다. HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스 이거는 VIEW이다. TABLE이 아니다. 뷰는 SELECT 한 결과를 바탕으로 뷰를 만들라는 것이다. 즉, 뷰는 데이터가 들어간게 아니다. 가상의 공간으로, 그냥 쿼리 실행하는 것이.. 2023. 3. 8.
CSS - div를 가운데 정렬 (inline-block) 이전 포스팅에서는 float과 overflow를 이용하여 div를 가운데 정렬해보았다. div를 가운데 정렬하기 위해서 또 한가지의 방법이 있다. 알아보자. HTML 삽입 미리보기할 수 없는 소스 .wrap > div { } 태그에 width를 추가하고, display 값을 inline-block으로 바꾸었다. .wrap > div { border : 1px solid black; background-color: maroon; width: 20%; display: inline-block; } float과 inline-block에는 차이점이 있다. float은 빈공간을 안띄워주고, inline-block은 공간을 띄워준다. 단, inline-block은 크기를 조절해주기가 float보다는 어려운 단점이 있다. 2023. 3. 7.