본문 바로가기
모겜프 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.
JPA 어플리케이션 개발 jpa 구동 방식 persistance에서 생성하고 entitymanagerfactory 에서 entitymanager를 찍어내서 돌린다 public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager entityManager = emf.createEntityManager(); // 실제 동작 코드를 작성하는 부분 entityManager.close(); emf.close(); } } h2에 테이블 생성 create table Member ( id bigint not null, name varch.. 2023. 10. 29.
JPA 프로젝트 생성 h2 1.4.200 으로 시작 이상태로 시작하기 인텔리제이 new project - maven으로 새 프로젝트를 만들고 porm.xml 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 org.apache.maven.plugins maven-compiler-plugin 3.8.1 8 8 org.hibernate hibernate-core 5.4.29.Final javax.xml.bind jaxb-api 2.3.1 com.h2database h2 1.4.200 ch.qos.logback logback-classic 1.2.3 persistance.xml jpa는 특정 데이터베이스에 종속 되지 않고 hibernate.dialect 속성에 지정해주면 그 db에 맞게 바뀐다 • H2 : org.h.. 2023. 10. 29.
페이징 페이징을 사용하는 이유 - 목록이 100만개일때 100만개 전부를 select로 한번에 가져오는 것은 엄청난 부하가 걸린다 데이터베이스에서 데이터 양을 적당히 끊어서 가져오는 것을 페이징이라고 한다, 페이징에는 2가지 형태가 있다 Offset based paging - 페이지 번호를 찾아서 이동하는 페이징 select* from book order by likes desc limit 10 offset 0; 데이터를 10개씩 가져와서 보여주고 0개씩 건너뛴다 limit - 가져오는 데이터의 갯수, offset - 건너뛸 데이터의 양 페이지 x번에 대하여 한 페이지에 y개를 보여주기 select * from book order by likes desc limit y offset(x - 1) * y; Offs.. 2023. 10. 29.
조인, 서브쿼리 조금 더 알아본 내용 조인을 위해서는 기본키(PRIMARY KEY, PK)와 외래키(FOREIGN KEY, FK) 관계로 맺어져야 하고, 이를 일대다 관계라고 한다 조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다. OUTER JOIN(외부 조인)은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다. CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다. SELF JOIN(자체 조인)은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다. inner join - 교집합 outer join - 합집합 LEFT.. 2023. 10. 29.
9주차 조인, 서브쿼리 시험에 나오는 유형, 책 103p, 교집합 차집합 내용 다시 보자 -- 책을 한번도 안산 고객을 가져오기 select name from customer c where custid not in (select custid from orders) left outer join으로 customer의 데이터 전체와 orders에서 customer와 연관있는 데이터를 가져왔다 join은 on으로 조건을 표현한다 -- 책을 주문한 고객의 이름과 주문, 책을 출력 select c.name, o.saleprice from customer c left outer join orders o on c.custid = o.custid; 서브쿼리 - where절에 select문을 넣어서 조건을 만드는 것 -- 가격이 가장 비싼 책의.. 2023. 10. 27.
컴알 시험대비 1. 삽입정렬 알고리즘 코드 빈칸문제로 나온다 while 루프 버전 def insertion_sort(a) : n = len(a) for i in range(1,n): j = i -1; key = a[i] while j >= 0 and a[j] > key : a[j+1] = a[j] j -= 1 a[j+1] = key for 루프 버전 def insertion_sort(a) : n = len(a) for i in range(1,n): for j in range(i,0,-1): if a[j-1] > a[j]: a[j-1], a[j] = a[j], a[j-1] 쉘 정렬 4,2,7,1,9 리스트를 나눌 간격인 갭은 전체 리스트 길이 5 // 2 +1인 3으로 시작한다 {4,1}, {2,9}의 부분 리스트를 부.. 2023. 10. 27.
시험대비 리니어 레이아웃 자체는 gravity, 그 안의 컴포넌트는 layout_gravity를 사용한다 gravity 속성은 android : gravity = "right|bottom" 으로 두개를 조합하는 것도 가능하다 background는 그냥 background를 사용한다 radio그룹내의 라디어 버튼은 중복 선택 x 버튼같은 위젯은 backgroundTint 넣자.. 책내용 android:rotation="45" -------------------------------------------------------------- package com.example.compute2;//각자작성한 프로젝트명으로 반드시 변경해야 함 import androidx.appcompat.app.AppCompatActivi.. 2023. 10. 25.
데베교양 확인문제 2023. 10. 25.
모겜프 시험대비 안드로이드 역사 2005 구글이 안드로이드 인수, 2007년 OHA(open handset alliance) 컨소시엄 구성, 2007년 안드로이드 sdk 1.0 발표 최초의 안드로이드 폰 - HTC의 G1 애플리케이션 실행 단계 : java 소스 -> .dex파일 -> .apk 파일 안드로이드를 구성하는 컴포넌트 : 액티비티,서비스,broadcast receiver, content provider 액태비티 -> 화면, 액티비티가 모이면 어플리케이션이 됨 서비스 -> 백그라운드에서 실행되는 컴포넌트(ex - bgm) content provider - 데이터를 관리하고 다른 앱에 제공 인텐트 -> 안드로이드가 적절한 컴포넌트를 찾아서 실행 xml - 화면 디자인, SGML의 부분 집합으로 웹 상에서 텍스트 .. 2023. 10. 23.
데베교양 시험대비 select문, 문자타입함수, 숫자타입함수, NVL, DECODE 사용법 그룹함수, count, sum, avg, max, min erd 키와 제약조건 pdf 8 까지 시험범위 문자, 숫자 처리 함수 시험범위 그룹 함수 소문자, 대문자, 앞에만 대문자로 출력하기 select lower('Chanho_lee'), upper('chanho_lee'), initcap('CHANHO_LEE') from dual; substr- (문자열,시작인덱스,가져올자리수) concat - 결합 select substr('Chanho_lee', 8,3), replace('ChanhoLEE','Chanho','Hoshi'), concat('chanho','lee') from dual; instr - 문자열 시작 위치 리턴 lp.. 2023. 10. 23.