728x90 반응형 분류 전체보기647 빌드하고 실행하기 ./gradlew build cd build/libs java -jar hello-spring-0.0.1-SNAPSHOT.jar 콘솔에서 작업파일로 이동한다. 나는 hello-spring의 hello-spring디렉토리로 이동했다. 그리고 ./gradlew build 명령어를 입력하면 빌드가 시작된다. 빌드가 끝났다면 build디렉토리로 이동해보자. 안에 libs 디렉토리가 있는데 libs 디렉토리로 이동해보면, 내부에 jar파일이 생긴것을 볼 수 있다. 이 파일을 자바로 실행시키면.. 서버가 실행된다. 서버 배포할 때 이 파일 하나만 넣고 실행시키면 된다. 2023. 3. 18. Socket Basic (실습) Network Programming(Socket Programming) 소켓은 컴퓨터 네트워크에서 프로세스 간 통신을 가능하게하는 기술이며, 네트워크상에서 데이터 송수신을 담당한다. 소켓은 주로 클라이언트/서버 모델에서 사용되며, 클라이언트는 서버로 연결을 시도하고, 서버는 연결을 수락하고 데이터를 송수신한다. 소켓은 application 레이어와 transport레이어 사이의 인터페이스 역할을 한다. 서버측 주요코드 #include int socket(int domain,int type, int protocol); //성공시 파일 디스크립터를, 실패시 -1 반환 int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);//IP와 포트번호를 소켓.. 2023. 3. 17. IP Addressing: classful, CIDR /IP Fragmentation /NAT IP Address(IPv4) 컴퓨터 네트워크에서 장치를 식별하는 고유한 32비트 숫자. 계층적 주소 지정: 10001101 11011111 01010100 0111000 이러한 IP주소가 있을 때 예를 들어, 왼쪽에서 24비트는 Network주소, prefix로 사용하여 기관(소속)을 나타내고 25째 비트부터는 Host주소, 해당 소속 안에서의 번호를 나타냄 (prefix가 항상 24비트인것은 아님) Classful addressing 예전에는 IP주소에서 Network부분을 8비트로 사용하였는데, 2^8으로 기관들을 나타내기에는 너무 적어서 Classful Addressing이라는것을 사용함. (오늘날엔 사용되지 않음) Classful Addressing은 A,B,C 등의 클래스로 나누어 A클래스는 .. 2023. 3. 17. Process and Scheduling Process Concept OS는 다양한 프로그램을 실행한다. -배치 시스템 -interactive 시스템 process란 실행중인 프로그램이다. 프로세스는 OS가 자원을 할당하는 최소단위이고, 스레드는 프로세스 내에서의 독립적인 실행단위이다. 프로세스는 다음을 포함한다 1. Program(코드/텍스트): 프로그램 코드와 리터럴상수를 저장 2. data : 프로그램 실행 전체에 필요한 데이터를 저장. 전역변수, static 변수, symbolic constant(#define..), 문자열 상수 등을 저장 3. Stack : OS에 의해 관리됨(자동으로 할당,해제됨). 지역변수, 함수 등이 저장된다. 4. Heap : 프로그래머에 의해 관리됨. 메모리 누수가 일어날 수 있음. 동적할당한 객체, 변수등이.. 2023. 3. 16. 외부 정렬(External Sort) 외부정렬은 대용량의 데이터를 정렬하는 알고리즘으로, 메모리보다 큰 데이터셋을 정렬할 때 사용된다. 외부정렬은 기본적으로: 정렬할 파일을 메모리에 적재가능한 크기의 run들로 분할한다. 각 run에 대해 내부 정렬 후 다른 파일에 저장한다. 파일에 저장된 run들을 병합하여 다시 파일에 저장한다. 병합된 run의 수가 1이 될 때까지 병합을 반복한다. 병합 방법에 따라 sort/merge 알고리즘은 다음과 같이 분류할 수 있다. Binary Sort/Merge Balanced Binary Sort/Merge Balanced K-way Sort/Merge Polyphase Sort/Merge Binary Sort/Merge Sorting phase - 초기 run들을 정렬한 후, 2개의 외부 파일에 저장 M.. 2023. 3. 16. ObjectMapper ObjectMapper를 알아보자.. restAPI를 이용할 때, 클라이언트가 보낸 JSON데이터는 자동으로 DTO로 변환되고, 서버에서 클라이언트로 데이터를 보낼때에도 DTO에서 JSON으로 자동으로 변환되었다. 어떻게 변환되는 것인지.. 그 동작을 살펴보자 @Test public void 자바_객체를_JSON으로_변환() throws JsonProcessingException { //준비 List ingredients = Arrays.asList("shrimp","beef","bread","tomato"); Burger burger = new Burger("burger",5500,ingredients); ObjectMapper objectMapper = new ObjectMapper(); //수행. .. 2023. 3. 14. AOP(Aspect Oriented Programming) 스프링 부트 AOP (Aspect-Oriented Programming)는 스프링 프레임워크에서 제공하는 기능으로, 비즈니스 로직과 같은 핵심 기능과 로깅, 보안, 트랜잭션 처리와 같은 부가 기능을 분리하여 개발할 수 있도록 지원합니다. 예를 들어, @Transactional //DB를 건들기때문에, 중간에 문제가 생기면 롤백되도록 트랜잭션으로 설정 public CommentDto create(Long articleId, CommentDto dto) { // log.info("input => {}",articleId); // log.info("input => {}",dto); //게시글조회 및 예외발생 Article article = articleRepository.findById(articleId) ... 2023. 3. 14. 댓글 수정, 삭제기능 추가하기 (API 호출, fetch) 수정기능 {{#commentsDtos}} {{nickname}} edit delete {{body}} {{/commentsDtos}} 수정버튼을 누르면 모달창이 뜨도록, 모달 트리거 버튼을 추가해준다. 안에 data-bs가 무더기로 있는것은.. 모달 트리거 버튼을 눌렀을 때 나오는 모달창으로 데이터를 전달하기 위함이다. Modal title nickname comment {{#article}} {{/article}} save 모달 코드도 추가해준다. 이 코드들은 부트스트랩에 있다.. let commentEditModal = document.querySelector("#comment-edit-modal"); commentEditModal.addEventListener('show.bs.modal',funct.. 2023. 3. 14. 버킷 정렬, 기수 정렬, 병합 정렬 버킷 정렬: 1.입력 배열의 원소들을 해당하는 버킷에 저장 2. 각 버킷을 정렬함. 3. 버킷을 차례로 방문하여 원소들을 원 배열에 저장 기수 정렬(Radix sort) -높은 자리 우선 정렬(MSD) -낮은 자리 우선 정렬(LSD) 가 있음. 이 때 LSD방식은 버킷별로 별도 정렬 단계가 필요 없으므로 MSD보다 많이 사용됨. LSD를 이용한 기수 정렬 입력 데이터에서 가장 큰 숫자를 max라고 할 때, 입력 데이터를 일의자리 수부터, max의 최대자릿수까지,한 값을 기준으로 삼아 차례대로 counting sort를 반복한다. public class Radix { public static void sort(int[] A){ int i,m = A[0], exp=1, n=A.length; int[] B =.. 2023. 3. 13. Scan Conversion 2D Cartesian Coordinate System 2차원 직각 좌표계. 수평 기준축인 x축과 수직 기준축인 y축이 직각을 이루며 만들어낸 평면 위에 좌표를 기록. 일반적으로 2차원좌표계에서 (x,y)쌍으로 위치를 표현할 수 있고, x,y는 실수범위로 사용가능하지만 그래픽을 전제하는 좌표계에서는 x,y가 정수여야 한다. (물리적으로 존재하는 Pixel의 위치값이기 때문에 정수일 수밖에 없다) Scan Conversion? 스캔 변환. 스캔 방식을 이용해 아날로그 도형을 디지털 도형으로 변환하는 알고리즘. 아날로그 도형의 특성등을 스캔하여 어떤 픽셀을 켤지 등의 정보를 비트맵 형식으로 저장함. 예를들어, 아날로그로 표현된 선분을 pixel들의 집합(디지털)로 만들어 냄. 무한한 값으로 표현되는 아날로그.. 2023. 3. 13. Storage Structure/Multiprogramming/Multitasking/process/memory/file Storage Structure 메인 메모리 - CPU가 직접 접근 가능한 저장장치. 전원 공급이 멈추면 내용이 휘발된다. (RAM 등) 보조 기억장치(Secondary strage) - 비휘발성. 메인메모리보다 느리지만 데이터를 영구적으로 저장가능.(HDD,SSD, USB 등) 자기 디스크(magnetic disk) - 대표적으로 하드디스크가 있음 전자식 디스크(Electronic disk) - 한 종류로 flash memory가 있음. 플래시메모리는 SSD, USB등이 있고, EEPROM과 유사하게 동작함. storage system은 다음과 같은 기준으로 정렬할 수 있다.. -속도 -비용 -크기 -휘발성 strage system 계층에서 위로갈수록 용량당 가격이 비싸고 빠르다. 캐싱 - 아래 계층의.. 2023. 3. 13. 자바스크립트 fetch로 REST API 호출하기 (댓글등록) 댓글 폼에 댓글내용을 작성하고 전송버튼을 클릭. 해당 버튼의 이벤트리스너를 추가해 클릭을 감지하고 클릭시에 fetch를 통해 RestAPI를 호출해보자.. nickname comment {{#article}} {{/article}} save 뷰페이지에는 새 댓글의 정보를 입력할 폼이 있다. nickname, body를 입력할 란이 있고, 각 란은 id값을 지정해놓았다. 또한, 현재 글의 article_id 정보를 함께 전달하기 위해 hidden타입의 input에 article_id값을 넣어두었다. addEventListner를 이용해 전송버튼의 클릭을 감지하고, 폼에 입력된 정보를 이용해 JS 객체 comment를 생성한다. 그리고 fetch메소드를 이용하여 RestAPI를 호출하는데, fetch() 메.. 2023. 3. 13. 댓글 REST API 완성하기 Comment의 controller와 service를 만들어 REST API를 완성해보자. @RestController public class CommentApiController { @Autowired private CommentService commentService; //댓글 목록 조회 @GetMapping("/api/articles/{articleId}/comments") public ResponseEntity comments(@PathVariable Long articleId){ List dtos = commentService.comments(articleId); return ResponseEntity.status(HttpStatus.OK).body(dtos); } //댓글 생성 @PostMap.. 2023. 3. 13. 내 꿈 어디 한적한 촌동네에 집 한 채 지어서 살고 싶다 텃밭에 식물도 키우면 참 좋을 것 같다 베란다에서보다 햇볕도 많이 받고 잘 자라겠다 토끼도 한두 마리 있으면 좋겠다 근데 내가 토끼를 잡아다가 가둬놓고 키우는 건 좀 미안하니까 원래 근처에서 살고 있던 야생토끼가 내 텃밭에 있는 풀 뜯어먹으러 왔으면 좋겠다 흙 다 헤집어놓고 풀 다 뜯어먹어도 하나도 기분 안 나쁠 것 같다 그리고 한가하게 빵이나 좀 굽고 운동도 좀 하고 텃밭에 물 주러도 가고 포도나무도 키웠으면 좋겠다 지금 키우고 있는 천혜향이랑 아보카도도 흙바닥에 심어서 나무 될 때까지 컸으면 좋겠다 근데 도시랑 너무 멀면 또 너무 힘들 것 같고 시골 벌레도 싫고 쿠팡배송 안 오면 어떡하나 그건 좀 고민인데 아무튼간에 집 짓고 평생 한가하게 살만큼 부리.. 2023. 3. 12. Comment 엔티티와 리파지터리 만들기 Article과 Comment 관계는 일대다 관계(One-to-many)이다. (하나의 글에 여러개의 댓글이 있으니) 이러한 데이터는 DB에 어떻게 저장될까? 댓글의 경우, [자신의 id/댓글내용/닉네임/글id] 등으로 저장될 것이다. 이 때, 글id를 저장함으로써 어떤 글의 댓글인지 알 수 있다. 데이터 자신을 대표하는 id는 PK(Primary Key)라고하고, 대상을 가리키는 id는 FK(foreign key)라고 한다. 여기서는 자신의id가 PK, 글 id가 FK가 되는것이다. 댓글을 위한 리파지터리는 JpaRepository를 상속받아 사용할건데, 기존에 ArticleRepository를 위해 상속받았던 CrudRepository에 추가적으로 일정 페이지의 데이터 조회, 정렬 등의 기능을 쓸 수.. 2023. 3. 11. 테스트코드 작성하기 테스트코드 작성하기 Service의 메소드들을 테스트해보자 Service에 들어가서 우클릭->generate->Test를 누르면 이러한 창이 뜨는데, 테스트할 메소드들을 아래에서 체크해 OK를 누르면 된다. 그럼 이렇게 해당 메소드의 테스트메소드가 생긴다. 이 메소드들을 감싸고있는 부모클래스 ServiceTest클래스에 @SpringBootTest 어노테이션을 붙여, 스프링부트와 연동되게 한다. 그리고 테스트가 아닌, 실제 service도 사용해야하기 때문에 ArticleService(내가만든 서비스)를 선언하고 Autowired 해주었다. @Test void index() { //예상 시나리오 Article a = new Article(1L,"gagaa","111content"); Article b =.. 2023. 3. 11. Service와 Transaction 서비스는 Controller와 Repository 사이에서 동작한다. 서비스를 추가함으로써 -컨트롤러는 클라이언트로부터 요청을 받고 응답처리만 하고, -서비스는 컨트롤러로부터 전달받은 요청을 처리한다. -필요한 데이터는 리파지토리를 이용해 가져올 수 있다. 서비스는 비즈니스 로직을 처리하고, 처리결과를 컨트롤러로 보낸다. @Service 어노테이션을 붙여 사용할 수 있다. Post요청을 처리하는 과정을 예시로 적어보았다. 1. 컨트롤러에서 Post요청을 받고, 서비스 create(data)를 호출 2. 서비스는 적절하게 데이터를 가공하고 요청에 맞는 비즈니스 로직을 처리함. DB접근이 필요하다면 리파지토리를 호출 3. 리파지토리는 DB에서 데이터를 빼거나 저장하는 역할을 수행 4. 서비스에서 처리결과를 .. 2023. 3. 11. Rest API 웹서버의 자원을 클라이언트에 구애받지 않고, 사용할 수 있도록 하는 설계방식. HTTP를 통해 서버의 자원을 다루게 하는 기술. 서버의 응답은 특정 기기에 종속받지 않고 모든 기기에 통용될 수 있는 데이터만을 반환함. @GetMapping("/api/articles") public List index(){ return articleRepository.findAll(); } @GetMapping("/api/articles/{id}") public Article index(@PathVariable Long id){ return articleRepository.findById(id).orElse(null); } Get요청시 보여줄 데이터만을 리턴한다. 특정id값의 데이터만 보여줄 때는 PathVariable로.. 2023. 3. 11. IoT and Embedded Software Computer? 폰 노이만 구조 - 처리장치(CPU)와 기억장치(memory)를 분리한 구조 CPU(Central Processing Unit- Processor)는 Control Unit(제어장치)와 ALU로 이루어짐 임베디드 시스템(Embedded system)이란? 컴퓨터 하드웨어와 소프트웨어가 조합되어 특정한 목적을 수행하는 시스템. programmable computer를 포함하지만, general-purpose computer는 아님.(특정 목적을 수행함) 미리 정해진 특정한 기능을 수행하는 프로그램이 내장되고 하드웨어와 소프트웨어의 변경이 어려운 경우가 많음. 그런데, 기술이 발달하면서 일부 임베디드 시스템들은 범용 컴퓨터와의 구분이 모호해짐(스마트폰..?) 임베디드 시스템이 사용되는 예는.. 2023. 3. 11. Network Layer Basic Layering 복습) 왜 레이어링을 할까? => 복잡성을 줄이고, 유연성을 높이기 위해. 그러나 레이어링 때문에 최대성능을 내지 못하기도 함. 레이어간 볼 수 있는 정보가 제한적이기 때문에, 크로스레이어 정보를 이용하면 더 좋은 성능을 낼 수 있음. Network Layer 네트워크 레이어의 주요 기능 - Forwarding : 라우터로 들어온 패킷을 다른 라우터로 보내는 것 - Routing : 패킷들이 출발지에서 목적지까지의 경로를 결정함. routing algorithms 라우팅은 출발지에서 목적지까지의 경로를 정하는데, 그 경로로 패킷을 이동시키기 위해 라우터는 라우팅 알고리즘을 통해 포워딩 테이블을 만든다 포워딩 테이블에는 라우터에 들어온 패킷을 어디로 보내야 할 지의 정보가 담겨있다. 그런데.. 2023. 3. 10. 이전 1 ··· 7 8 9 10 11 12 13 ··· 33 다음 728x90 반응형