일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 인텔리제이
- start.spring.io
- dependency
- 컬렉션
- wrapper
- 제너릭
- 스프링
- 싱글톤
- Short
- suvlet
- bootstrap
- 언박싱
- boxing
- 클래스
- 빌드
- 루프
- maven
- 제네릭
- 메소드
- 박싱
- https://start.spring.io
- Java
- unboxing
- 콜렉션
- Jenkins
- 무한
- 자동형변환
- Scanner
- 내장객체
- 싱글턴
- Today
- Total
목록분류 전체보기 (447)
Developer Gonie
이번 게시물 흐름 요약 아래의 과정은 회원의 정보를 담을 Member 클래스(도메인)를 만들고 회원의 정보를 담을 공간 및 회원등록, 검색, 등등의 메소드 들을 가지는 클래스가 필요한데 아직 어떤 DB를 사용할지 정하지 않은 상태여서 구현해야할 메소드를 MemberRepository 인터페이스에 정의해두고 MemoryMemberRepository 클래스로 위 인터페이스의 추상메소드들을 완성하며 회원의 정보를 담을 공간을 위해 HashMap을 갖도록 함. 더 요약하자면 1. Member 클래스 작성 2. MemberRepository 인터페이스 작성 3. MemoryMemberRepository 클래스로 위 인터페이스 구현 1. hello.hellospring 패키지 안에서 domain 패키지 생성 2. ..
* 아래의 의미들을 이용해 클래스 이름을 정하는데 참고했다. DAO(Data Access Objects) -> 아래서 PersonDao 클래스 -DB를 사용해 데이터를 조회하거나 조작을 전담하는 오브젝트로 DB와의 연결을 담당하기도 한다. - 저장소(테이블)에 데이터를 입력, 조회, 수정, 삭제 등의 처리를 한다. DTO(Data Transfer Object) -> 아래서 PersonBean 클래스 - 데이터의 전달을 위해 만드는 오브젝트 - 데이터를 담을 private 변수와 그 변수를 조작할 수 있는 public의 getter, setter 메서드로 구성한다. - bean 또는 vo(value object)라고도 한다. -- 초기 데이터셋 생성 drop sequence prdseq; create se..
* 주의 '?' 위치 홀더는 컬럼이름에 대해서는 사용할 수 없고, 값이 들어가는 자리에만 사용할 수 있다. 아주 일반적인 예시 String sql = "insert into products values(prdseq.nextval, ?, ?, ?, ?, ?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, bean.getName()); ps.setInt(2, bean.getStock()); ps.setInt(3, bean.getPrice()); ps.setString(4, bean.getCategory()); ps.setString(5, bean.getInputdate()); 실수하기 좋은 예시 쿼리문에서 like 사용시 아래와 같..
* 아래의 과정을 서버에서 빌드 빛 실행까지 한다면 이게 바로 웹어플리케이션이 되는 것이다. 1. 빌드하여 빌드폴더 생성하기 프로젝트 폴더 위치에 보면 gradlew 라는 파일이 보이는데 cmd에서 해당 파일이 위치한 폴더까지 이동 후 아래의 명령어를 실행하면 build 폴더가 생겨난다. 2. 실행하기 생성된 build 폴더 아래 위치한 libs 폴더 안으로 이동하여 이 위치에 존재하는 jar 파일 실행 3. 접속해보기 IDE에서 실행한 것과 결과는 동일하다. 빌드폴더 삭제하는 방법 만들어진 빌드폴더는 삭제도 할 수 있는데 다음과 같이 하면 삭제된다.
* 옛날에는 View 인 html에서 모든걸 다 처리해주어 가독성도 떨어지고 유지보수가 힘들었던 반면 요즘에는 MVC 패턴으로 역할을 나누어 처리함. MVC각각이 의미하는 바 1. Controller 컨트롤러는 비지니스 로직과 관련되어있거나 내부적인걸 처리하는데 집중해야한다. 2. View 화면을 그리는데 모든 역량을 집중해야 하는 곳 3. Model 컨트롤러에 있는 메소드가 View 쪽으로 데이터를 넘겨주고자 할 때 Hashmap 방식같은 걸로 Key, Value의 Pair 들을 담고있는 객체
* 기존의 방식과, API 차이점 이전까지는 클라이언트로 부터 url 요청을 받아 다시 html 을 반환해주는 것을 실습하였다. 여기서 만들어 볼 것은 API인데 API는 html을 반환해주는게 아니라 데이터를 반환해준다. @GetMapping 에 의해 url을 받아 컨트롤러까지 찾아가는 것은 이전에 본것들과 같지만 메서드에 @ResponseBody 가 하나 더 붙어서 ViewResolver가 아니라 HttpMessageConverter가 돌아간다. 마지막에 결과를 반환해줄 때 Body부에 리턴하는 데이터를 직접 넣어주는 것이다. (여기서 말하는 Body는 html의 body 태그가 아니라 HTTP에서 말하는 Body 부분이다.) @ResponseBody 사용원리 문자를 return 하는 경우 Strin..
* 아래의 경우 @RequestParam 을 사용해 파라미터를 클라이언트로 부터 받을 것을 명시해두었기 때문에 클라이언트가 url 입력시 파라미터를 입력하지 않고 localhost:8080/hello-mvc 만 치면 오류페이지가 뜸에 주의. 1. 컨트롤러 클래스에 'hello-mvc' 를 맵핑시켜 이를 처리하는 메소드 추가 메소드를 해석하자면 url 에서 name이라는 변수 이름으로 값을 받아와 name변수에 넣고 이를 다시 key는 'name', value는 name변수의 값인 페어를 model에 저장해 hello-template.html 뷰로 넘겨준다는 의미 package hello.hellospring.controller; import org.springframework.stereotype.Cont..
* 여기서 사용되는 MVC 패턴에 대한 간략 설명 M : 컨트롤러에서 데이터를 담는 객체 V : 템플릿 엔진 문법에 맞게 작성된 html 파일 C : 아래서 구현하는 컨트롤러 클래스 1. 사용자가 localhost:8080/hello url을 입력하여 요청을 보내오면, 이 요청을 스프링 부트에 내장된 톰켓 서버가 받음 2. 톰켓 서버는 이 요청을 스프링에게 넘겨줌. 3. 스프링은 컨트롤러에서 'hello' 와 mapping된 컨트롤러를 찾아봄(정적컨텐츠와 동일한 점) 4. 이를 처리해줄 만들어놓은 컨트롤러가 존재하여 컨트롤러를 찾아갔더니 문자열을 반환함. 5. viewResolver는 이 문자열을 받아 templates/ 위치에서 이 문자열에 해당하는 html이 있나 확인하고 이 html 파일 내부에 존..
* 정적 컨텐츠 방식에서는 템플릿엔진을 거치지 않고 파일 그대로 반환되기 때문에 html 안에서 프로그래밍을 할 수 없다. 1. 사용자가 localhost:8080/hello-static.html url을 입력하여 요청을 보내오면, 스프링 부트에 내장된 톰켓 서버가 받음 2. 톰켓 서버는 이 요청을 스프링에게 넘겨줌. 3. 스프링은 컨트롤러에서 hello-static 과 mapping된 컨트롤러를 찾아봄(바로 다음에 배울 방식과 동일한 점) 4. 이를 처리해줄 만들어놓은 컨트롤러가 존재하지 않는다면 resources: static/ 경로에 위치한 hello-static.html을 찾아봄 5. 존재하면 이 파일을 그대로 클라이언트에게 반환해줌 1. resources/static/위치에서 hello-stat..
* 아래서 테이블의 출력결과에는 오타 있는게 좀 있어서 살짝 다르게 나올수도 있음 drop table albums; create table albums( num number primary key, song varchar2(30) not null, singer varchar2(30) not null, company varchar2(20) not null, price number default 0 ); drop sequence albumseq; --sequence albumseq 생성 : 1~100까지 증가 create sequence albumseq increment by 1 start with 1 minvalue 1 maxvalue 100; -- 아래의 형태로 3번의 insert 하기 insert int..
1. 가장 원시적으로 delete 문을 실행하는 방법 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class Delete { public static void main(String[] args) { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String id = "jspid"; String pw = "jsppw"; Connection conn = null; try { // 1..
1. 가장 원시적으로 update 문을 실행하는 방법 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class Update { public static void main(String[] args) { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String id = "jspid"; String pw = "jsppw"; Connection conn = null; try { // 1..