본문 바로가기
모겜프 12주차 11주차 버블에 쓰레드를 넣을 걸 간단하게 해봤다 ppt 27쪽 까지 진행 2023. 11. 23.
6장 API 만들기 • API와 REST API API 식당을 예시로 들면 손님(클라인언트) - 점원(API) - 주방(서버)의 관계에서 클라이언트의 요청을 서버에 전달하고, 서버의 결과물을 클라이언트에게 돌려주는 역할을 한다 REST API URL의 설계 방식이다 URL만 보고도 어떤 행동을 하는 api인지 알수 있게 한다 rest api 규칙 restful 한 api를 만들기 위해서 동사를 url에 쓰지 않는다 동사는 http의 post, get, put, delete 메서드로 사용한다 • 블로그 개발을 위한 엔티티 구성 id, title, content를 가지는 엔티티 만들기 생성자, 게터를 롬복을 사용하면 편리하다! @Entity @Getter @NoArgsConstructor(access = AccessLevel... 2023. 11. 23.
5장 ORM • 데이터베이스와 ORM JPA : 자바에서 RDBMS를 사용하는 방식을 정의해둔 인터페이스 하이버네이트 : JPA의 구현체인 ORM 프레임워크, 하이버네이트를 이용하면 DB 종류에 상관없이 자유롭게 사용가능하다 엔티티 : db 테이블과 매핑되는 객체, db 테이블과 직접 연결되기에 일반객체와 구분되게 엔티티라 한다 엔티티 매니저 : 엔티티를 관리해 db와 어플리케이션 사이에서 crud를 한다 엔티티 팩토리 : 엔티티 매니저를 생성하는 곳 스프링 부트에서는 직접 엔티티 매니저 팩토리를 만들지 않고 내부에 하나의 엔티티 매니저 팩토리를 두고 @PersistenceContext나 @Autowired를 사용해서 엔티티 매니저를 사용한다 • 영속성 컨텍스트 영속성 컨텍스트는 엔티티를 관리하는 가상의 공간이다 1.. 2023. 11. 22.
4장 스프링 부트 3 테스트 • 테스트 코드 개념 given - when - then 패턴으로 테스트 코드를 작성한다 Junit이나 AssetJ를 이용해서 테스트 코드를 작성한다 • Junit 테스트 작성 *Assertions 는 Junit껄로 임포트한다 public class JUnitTest { @DisplayName("1 + 2 = 3이다") @Test public void junitTest(){ int a = 1; int b = 2; int sum = 3; Assertions.assertEquals(a+b, sum); } } •자주 사용하는 JUnit 테스트 어노테이션 public class JUnitCycleTest { @BeforeAll static void beforeAll() { System.out.println("@.. 2023. 11. 22.
3장 스프링 부트 3 구조 이해하기 • 스프링 부트 3 구조 살펴보기 스프링 부트는 각 계층이 양 옆의 계층과 통신하는 구조를 따른다 프레젠테이션 계층 비즈니스 계층 퍼시스턴스 계층 데이터베이스 각 계층은 서로 소통이 가능하고, 영향을 끼치지는 못한다 • 프레젠테이션 계층 http 요청을 받고 이 요청을 비즈니스 계층으로 전송한다 컨트롤러가 프레젠테이션 계층의 역할을 한다 • 비즈니스 계층 서비스를 만들기 위한 로직인 비즈니스 로직을 처리한다 주문 서비스를 만들때 비즈니스 로직은 1. 주문 개수, 가격 등 데이터 처리 로직 2. 예외처리 로직 3. 주문 받기/ 취소하기 프로세스 로직 서비스가 비즈니스 계층의 역할을 한다 • 퍼시스턴스 계층 DAO 객체 등을 사용해서 db 관련 로직을 처리한다 DAO : 데이터베이스 계층과 상호작용 하기 위.. 2023. 11. 21.
2장 스프링 부트 3 시작하기 • 스프링 부트 3, 자바 17 기능들 텍스트 블록 - """ 안에 여러 줄의 텍스트 ex) 쿼리문을 넣을 수 있다 formatted 메서드 json을 파싱할떄 String textBlock = """ { "id" : %d "name" : %s } """.formatted(2, "juice); 형태로 함수 하나로 파싱할 수 있다 레코드 데이터 전달 객체를 빠르고 간편하게 만든다 레코드는 상속이 안되고 파라미터에 정의한 필드는 private final로 정의된다 레코드는 getter를 자동으로 만든다 record Item(String name, int price){ //여기 들어가는 파라미터는 private final로 정의된다 } Item juice = new Item("juice", 3000); jui.. 2023. 11. 21.
1장 스프링 기초 지식 백엔드 알아두면 좋은 지식 자바 어노테이션 - 메타 데이터로 사용하는 코드에 추가하는 표식 IoC와 DI 제어의 역전 - 클래스에 안에서 객체를 직접 생성하는 방식이 아닌 받아온 객체를 할당하는 방식 객체를 할당하는 건 스프링 컨테이너가 한다 의존성 주입 @Autowired등의 어노테이션으로 스프링 컨테이너에서 객체를 주입해준다 A에서 B를 주입받는 방법 public class A{ @Autowired B b; } 스프링 빈 - 스프링 컨테이너가 생성하고 관리하는 객체 @Component 등을 붙이면 빈으로 등록되어 스프링 컨테이너가 관리 AOP - 관점 지향 프로그래밍, 핵심 관점과 부가 관점을 나누어서 개발한다 계좌 이체 프로그램에서 핵심 관점 : 계좌 이체 부가 관점 : 로깅, db연결 PSA - .. 2023. 11. 21.
가비지 발생시점 public static void main(String[] args) { Main T = new Main(); Scanner in = new Scanner(System.in); String a = "good"; String b = a; a = null; System.out.println(a); System.out.println(b); } 기존에는 b가 a를 가르킨 상태에서 a를 널로 초기화하면 b도 널이 될줄 알앗지만 실행하면 a는 null이 되고 b는 good을 출력한다 책 212 쪽 예제 4-9 참고 2023. 11. 17.
데베기초 11주차 DDL • CREATE CREATE TABLE EMP01( EMPNO NUMBER(4), ENAME VARCHAR2(20), SAL NUMBER(7, 2)); 서브쿼리로 테이블 복제해서 생성하기, livesql에서 실습해서 앞에 스키마명을 붙인다 create table test as select * from scott.emp; 컬럼을 선택해서 원하는 컬럼만 복사하기 CREATE TABLE EMP03 AS SELECT EMPNO, ENAME FROM EMP; CREATE TABLE EMP05 AS SELECT * FROM EMP WHERE DEPTNO=10; where 절을 이용해서 테이블의 구조만 복사하기 항상 false이기에 데이터는 복사되지 않고 구조만 복사된다 CREATE TABLE EMP06 AS SEL.. 2023. 11. 16.
안드교양 11주차 버튼으로 viewflipper 넘기기, 버튼 클릭하면 리니어 레이아웃이 넘어간다 viewflipper 메서드로 자동으로 넘기기, 멈추기, 앞뒤 뷰로 넘어가기 동작 가능 package com.example.aap; import androidx.annotation.MainThread; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.widget.ArrayAdapter; impor.. 2023. 11. 16.
11주차 버블 랜덤하게 생성해서 움직이고 클릭하면 터져서 작은 버블이 나옴 bubble package com.example.myapplication; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.PointF; import java.util.Random; public class Bubble { private int scrW, scrH; public boolean isDead; private Context context; private int speed; private PointF dir = new PointF(); private Ran.. 2023. 11. 16.
데베 퀴즈 대비 유저 생성, 권한주기, 테이블 생성 -- ho 라는 사용자 생성, 비밀번호는 1111(반드시 작은 따옴표로) create user ho@localhost identified by '1111'; -- test 스키마를 만들고 변경할 수 있는권한을 ho에게 준다 grant all privileges on test.* to ho@localhost with grant option; -- 테이블 만들기, check 옵션, 기본키 auto_increment, 외래키 생성할때 어떻게 하는지를 중점적으로 보기 create table publisher( pubno char(4) check(pubno like 'p___') primary key, pubname varchar(20) default '한양출판사' check(.. 2023. 11. 16.
웹 어플리케이션 서블릿 @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response){ //애플리케이션 로직 } } • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행 • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse WAS는 Request, Response 객체를 새로 만들어서 서블릿 객.. 2023. 11. 15.
인터넷 네트워크 • IP • 지정한 IP 주소(IP Address)에 데이터 전달 • 패킷(Packet)이라는 통신 단위로 데이터 전달 패킷은 아래처럼 출발지 ip, 목적지 ip와 데이터를 가지고 전송된다 • IP 프로토콜의 한계 • 비연결성 - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 • 비신뢰성- 중간에 패킷이 사라지거나 패킷의 순서가 달라질수 있음 • 프로그램 구분 - 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 문제가 생신다 이런 한계점을 극복하기 위해서 TCP, UDP 프로토콜을 사용한다 • TCP 프로토콜의 특징 전송 제어 프로토콜(Transmission Control Protocol) • 연결지향 - TCP 3 way handshake (가상 연결) • 데이터 전달 보.. 2023. 11. 14.
10주차 실기, 오픈북인데 소스 복붙안됨, • 내부함수 예제 use madang; -- 내장함수fh 도서 테이블의 출판사의 가격 평균을 백원단위 반올림 select publisher, round(avg(price),-2) from book group by publisher; select publisher, truncate(avg(price),-2) from book group by publisher; -- 고객 테이블 주소에서 대한민국을 한국으료 변경해서 검색 select replace(address,'대한민국','한국') from customer; -- 같은 성을 가진 사람이 몇 명이나 되는지 성별, 인원수를 구하기 = 20000; update book set price = 50000 where bookid =.. 2023. 11. 10.
10주차 기말에 힙, 퀵, avl 59, 78, 65, 23, 7, 25, 52, 49, 99, 80 10개를 순차적으로 넣을 때 avl 트리 만드는 과정 • DFS 인접 리스트를 이용한 dfs 탐색 adj_list = [[2, 1], [3, 0], [3, 0], [9, 8, 2, 1], [5], [7, 6, 4], [7, 5], [6, 5], [3], [3]] n = len(adj_list) visited = [0] * n def dfs(v): visited[v] = 1 print(v,' ', end = ' ') for i in adj_list[v]: if visited[i] == 0: dfs(i) print("dfs") for i in range(n): if visited[i] == 0: dfs(i) 0~9 .. 2023. 11. 10.
데베기초 10주차 • 서브쿼리 다중 행 연산자 in, not in 두개 정도만 나온다 select * from employees e where e.salary like ( select salary from employees where last_name like 'De Haan'); select * from employees e where e.salary in(select min(salary) from employees group by department_id) order by e.salary desc; 다중 열 서브쿼리 select * from employees e where (e.job_id, e.salary) in (select job_id, min(salary) from employees group by job_id.. 2023. 11. 9.
안드교양 10주차 xml에서 시간, 날짜 등 디자인하기 CalendarView 2023. 11. 9.
모겜프 10주차 비눗방울 Bubble.java package com.example.mgp_lecture; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.util.Random; public class Bubble { public int w, h; public int sx, sy; public Bitmap bubble; public int x, y, bw; public Bubble(Context context, int sw, int sh, int px, int py) { w = sw; h = sh; x = px; y = py; Random rnd = new Rando.. 2023. 11. 9.
영속성 관리 • 영속성 컨텍스트 : 엔티티를 영구 저장하는 환경 EntitiyManager.persisrt(entity); 위 코드를 사용하면 영속성 컨텍스트에 저장한다 영속성 컨텍스트에 넣어서 관리가 된 상태가 되야 쿼리문이 작동한다 상태 4가지 비영속,영속,준영속,삭제 // 객체를 생성한 상태, 여기까진 비영속 Member member = new Member(); member.setId(100L); member.setName("HelloJPA"); //여기서부터 영속 상태 em.persist(member); //회원 엔티티를 영속성 컨텍스트에서 분리한 준영속 상태 em.detach(member); //객체를 삭제한 상타 em.remove(member); • 영속성 컨텍스트의 장점 1차 캐시에서 조회 멤버 객체를 .. 2023. 11. 7.