sosow0212의 등록된 링크

키자드에 등록된 총 885개의 포스트를 확인하실 수 있습니다.

Naver Blog

[Kotlin] 코틀링 + 스프링부트 조합으로 간단한 Rest API 서버 만들어보기

[Kotlin] 코틀링 + 스프링부트 조합으로 간단한 Rest API 서버 만들어보기 오늘 코틀린과 스프링부트를 이용해서 간단한 Rest API 서버를 만들어봤습니다. 아직은 코틀린이 익숙치 않아서 코틀린을 이용한 코드 작성이 조금 어렵게 느껴졌습니다. Entity package com.example.kopringstudy.entity import javax.persistence.Column import javax.persistence.Entity import javax.persistence.GeneratedValue import javax.persistence.GenerationType import javax.persistence.Id @Entity class Board ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long?= null, @Column(nullable = false) var title: Str

Naver Blog

[JUnit5] 스프링부트 단위 테스트 작성 예시(Controller & Service)

[JUnit5] 스프링부트 단위 테스트를 작성 예시 (Controller & Service) https://github.com/sosow0212/mentoring GitHub - sosow0212/mentoring: 22MJU 스프링 멘토 활동을 위해 제작한 프로젝트입니다. 22MJU 스프링 멘토 활동을 위해 제작한 프로젝트입니다. Contribute to sosow0212/mentoring development by creating an account on GitHub. github.com 위 깃허브 프로젝트를 기반으로 테스트코드 작성을 진행합니다. 테스트코드 작성에 앞서 먼저 사용된 Controller 와 Service 코드는 다음과 같습니다. BoardController package com.example.mentoring.controller; import com.example.mentoring.dto.BoardEditRequestDto; import com.example.me

Naver Blog

스물아홉 생일, 1년 후 죽기로 결심했다 - 하야마 아마리

누나 방에 들어갔다가 책장에 이 책이 꽂혀있는걸 봤어요 제목은 들어봤지만 관심도 흥미도 전혀 없었는데 갑자기 어떤 책일까 너무 궁금해서 오늘 읽었습니다! '하야마 아마리' 라는 작가가 쓴 자전적 소설인 이 책은 시작은 굉장히 어둡고 침침한 분위기로 시작되는데요 아마리는 잘하는 것 하나 없고 돈도 없고 별 볼일 없는 자신을 굉장히 비관하며 자살을 결심해요 그런데 죽을 용기도 없어서 자살하지도 못해요 그러다가 아마리에 머리속에 문득 스친 생각이 1년동안 돈을 벌어 라스베가스에 가서 돈을 잃거나 따거나 전부 쓰기 그리고 나서 약을 먹고 자살하기 그렇게 아마리가 그 목표를 위해 낮에는 계약직이지만 회사에서 근무하고 저녁에는 호스티스에서 일을 해요 또한 주말에는 누드 크로키 모델 알바를 하게됩니다 아마리가 자신의 마지막 목표인 라스베가스를 위해 영어 공부도하고 카드 게임도 열심히 배워요 또한 일을 하면서 평소에는 없었던 친구들도 사귀게 되고, 자신의 내면의 새로운 면을 발견하게 돼요 그렇게

Naver Blog

[명지대 스프링 멘토링] 스프링부트 프로젝트 생성하기, MySQL 스프링부트 연동하기

[명지대 스프링 멘토링] 스프링부트 프로젝트 생성하기, MySQL 스프링부트 연동하기 1. Spring boot 프로젝트 생성 2. MySQL 스키마 생성 3. Spring boot & MySQL 연동하기 4. 실행 1. Spring boot 프로젝트 생성하기 인텔리제이 상단에 파일 -> 새로만들기 -> 프로젝트 생성 클릭 좌측 메뉴 바에서 Spring Initializr 클릭 후 프로젝트 이름은 mentoring 으로 설정 언어 Java 타입 Gradle JDK 16 Java 11 Jar 선택 후 다음 클릭합니다. 다음을 눌렀다면 디펜던시 (종속성) 추가를 해줘야합니다. 종속성에 대해 간단히 설명해드리자면, 스프링부트 프로젝트에 기능을 추가하는 것입니다. Spring Web, Spring Data JPA, MySQL Driver, Lombok 일단은 이렇게 네 가지만 선택해줍니다. 추후에 다른 디펜던시를 추가하고 싶다면 https://mvnrepository.com/ Maven R

Naver Blog

보라카이 항공편 및 비행기 예약하기

보라카이 항공편 및 비행기 예약하기 동네 친구들과 이번 7월 6일에 해외여행을 가기로 했습니다. 처음에는 일본 가려고 했는데, 패키지 여행밖에 안 돼서 갈 수 있는 곳을 찾다가 보라카이로 결정했습니다. 항공편이 지금 안정적이지 않아서, 조건을 세웠는데 '합리적인 가격 + 직항'을 조건으로 항공권을 구했습니다. 예약 플랫폼은 노랑풍선으로 진행하려 했는데, 3시간이 지나도 예약 확인이 무응답이라서 마이리얼트립으로 티웨이항공 예약을 바로 했습니다. 가격은 왕복 인당 36만원정도 잡혔습니다. 그리고 숙소는 진짜 좋은 곳을 가고 싶어서 이곳저곳 알아보다가 '헤난 가든 리조트' 로 예약을 했습니다! 그리고 가기 위해서 필요한 절차들이 있었는데, 네이버 카페에서 참고를 했습니다. https://cafe.naver.com/cebuboracay/217565 필리핀으로 여행갈 때 & 여행 후 귀국할 때 필요한 서류와 절차 보라카이 자유여행 정보공유 대표카페 [세보맘] 마닐라, 세부, 보라카이 등 필리

Naver Blog

[JPA] 다양한 연관관계 알아보기

[JPA] 다양한 연관관계 알아보기 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany * 실무에서는 N:M (다대다) 방식을 거의 안 쓴다. N:1 (다대일) 연관관계 @ManyToOne N(다) 쪽에 외래키가 들어가 있는게 좋다. 가장 많이 쓰는 연관관계 다대일의 반대는 일대다이다. 다대일 양방향은 반대쪽 테이블에 List members 같이 추가 해주면 된다. 추가하고 mappedBy 속성으로 연관관계의 주인을 설정해준다. 1:N (일대다) 연관관계 실무에서 권장하진 않는다. Team 과 Member 객체 관계에서 Team 에서 List members 로 들어오면 OneToMany 가 된다. 일대다에선 일(1)이 연관관계의 주인이다. 테이블의 일대다 관계는 항상 다(N) 쪽에 외래 키가 있다. 객체와 테이블의 차이 때문에 반대편 테이블의 외래키를 관리하는 특이한 구조 @JoinColumn 을 꼭 사용해

Naver Blog

[스프링 스터디] #6 기능 구현 마무리, 리팩토링

[스프링 스터디] #6 기능 구현 마무리, 리팩토링 오늘은 지난 번 게시판 및 댓글 관련 민준님과 피드백을 했습니다. 이번 주까지 남은 기능 구현을 마무리 하기로 했습니다. 아직 구현하지 못한 쪽지 무한스크롤 및 세부 기능(ex. 대댓글)들 구현과 리팩토링은 아마도 다음주부터 순차적으로 진행될 것 같습니다. 리팩토링은 성능 개선을 최우선으로 생각했고, 필요하다면 Entity 변경을 하거나, JPA를 다르게 써볼 생각입니다. 이번주 기능 구현은 게시글 및 유저 신고기능 + 백오피스 API 구현입니다. - 게시글 및 유저 신고 기능 -https://blog.naver.com/sosow0212/222794987518 스프링부트 커뮤니티 API 서버 만들기 #7 - 신고 기능 구현, 말도 안되는 버그 해결하기 스프링부트 커뮤니티 API 서버 만들기 #7 - 신고 기능 구현, 말도 안되는 버그 해결하기 https://github... blog.naver.com - 백오피스 1 https://

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #7 - 신고 기능 구현, 말도 안되는 버그 해결하기

스프링부트 커뮤니티 API 서버 만들기 #7 - 신고 기능 구현, 말도 안되는 버그 해결하기 https://github.com/sosow0212/community GitHub - sosow0212/community: Community Restful API Server - Main project Community Restful API Server - Main project. Contribute to sosow0212/community development by creating an account on GitHub. github.com 질문 및 피드백은 환영입니다 :) 오늘은 신고 기능을 만들었습니다. 유저 신고 기능, 게시글 신고 기능만 도입했고, 신고 처리는 곧 도입할 예정입니다. 신고 기능이 간단해보였는데, 생각보다 구현하기 많이 까다로웠습니다. 신고 기능을 도입하기 위해서 생각했던 방법은 먼저 유저 신고기능을 구현하기 위해서 UserReport Entity를 만들고, Entity

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #8 - 어드민 페이지 만들기 - 1 (기본 틀 잡기)

스프링부트 커뮤니티 API 서버 만들기 #8 - 어드민 페이지 만들기 - 1 (기본 틀 잡기) https://github.com/sosow0212/community GitHub - sosow0212/community: Community Restful API Server - Main project Community Restful API Server - Main project. Contribute to sosow0212/community development by creating an account on GitHub. github.com 질문 및 피드백은 환영입니다 :) 오늘은 백오피스 기능 기본적인 구현을 했습니다. 신고된 유저 및 게시글 확인 및 정지 해제 기능을 도입했고, 아마 2편에서 추가로 더 진행할 예정입니다. package yoon.community.controller.admin; import io.swagger.annotations.Api; import io.swagger

Naver Blog

자주 쓰이는 HTTP 상태코드 정리

자주 쓰이는 HTTP 상태코드 정리 평소에 상태코드가 자꾸 헷갈려서 자주 쓰이는 상태코드를 정리해봤습니다. 4xx 400 Bad Request 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음 401 Unauthorized 클라이언트가 인증되지 않을 때 발생 403 Forbidden 클라이언트가 콘텐츠에 접근할 권리가 없을 때 발생 401과 다른 점은, 403은 유저가 누군지는 알고 있음 유저등급이 낮아서 못 들어가든 경우에 해당 404 Not Found 서버에서 요청받은 리소스를 찾을 수 없을 때 발생 즉 API 종점은 있으나 리소스는 존재하지 않을 때 발생 409 Conflict 요청이 현재 서버의 상태와 충돌될 때 발생 5xx 500 Internal Server Error 서버가 처리 방법을 모를 때 발생 502 Bad Gateway 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 중 잘못된 응답을 수신한 경우 발생

Naver Blog

[명지대 스프링 멘토링] 파일 구조의 이해

첫 번째 멘토링을 진행했습니다. 멘토링 내용은 다음과 같습니다. 멘토링 내용 1. 파일 구조의 이해 2. 깃허브와 기술 블로그 3. 여러 백엔드 기술스택 4. 포스트맨과 워크벤치, 인텔리제이 소개 5. 파일 구조 및 JPA 간단 소개 가장 중요한 파일 구조 및 JPA Repository - JPA를 이용해서 데이터베이스의 데이터를 가져온다. Entity - JPA를 이용해서 테이블 생성 및, 데이터를 다룰 수 있다. Service - 기능 구현 담당, Repository를 불러와서 기능을 구현하거나, 데이터를 저장한다 Controller - 클라이언트와 직접적으로 통신하며, Service를 불러서 기능 구현을 명령한다. 클라이언트(프론트엔드, 사용자) - Controller에게 데이터 조회를 요청하거나, 데이터 저장을 명령한다. JPA - 애플리케이션과 데이터베이스의 테이블을 연결한다. 기술적으로 애플리케이션의 객체를 테이블에 자동 영속화 해준다. 피드백 - 마이크 잡음이 있다. -

Naver Blog

[명지대 스프링 멘토링] 복습과 CRUD 게시판 만들기 - 1

[명지대 스프링 멘토링] 복습과 CRUD 게시판 만들기 - 1 properties 와 yml # Application.properties 방식 Spring-datasouce-url =. ~~ Spring-datasource-username =. ~~ Spring-datasource-password = ~~ # Application.yml 방식 (많이씀, 스프링, 도커 ...) Spring : Datasource: Username: "yoon" Password: "yoon2" Json 데이터 형식 # JSON = 서버끼리 데이터를 주고 받는 통신할 때 JSON을 주로 사용한다. { “Dataset” : “데이터”, “Dataset2”: “데이터2” } GET, POST, PUT, DELETE # 요청 # 밑에 방식에 대한 설명이 전부는 아니고, 게시판 만들기 할 때 주로 사용되는 개념만 적었습니다. GET - DB에서 데이터를 불러올때 사용된다. - 조회 POST - DB 데이터를 저

Naver Blog

2022년 보라카이 여행기

2022년 보라카이 여행기 이번에 동네 친구들과 보라카이 여행을 갔다왔습니다. 촤라~ 항상 이 순간은 설레는 것 같아요. 저희는 인천공항에서 칼리보 공항으로 갔습니다. 보라카이까지 가려면, 칼리보 공항에서 내리고 칼리보 공항에서 약 50km 차로 항구로 이동하고 약 10분간 배를 타고 보라카이로 이동해야합니다. 저희는 이 이동할 때 한국에서 미리 예약하고 갔습니다. 칼리보 길거리 칼리보에서 약 50km 이동해서 항구로 도착했습니다. 사람이 북적북적 엄청 많았습니다. 진짜 픽업샌딩 예약해서 바로 배 탔는데, 안 했으면 큰일날 뻔 했습니다. 꼭 픽업샌딩 예약하고 가시길... 배에 사람 꽉 찰 정도로 태우고 보라카이로 출발합니다. 보라카이 항구 도착! 첫 날은 날씨가 조금 흐렸습니다. 여행기간 내내 전부 비온다고 해서 걱정을 많이 했는데, 다행히도 첫 날이 가장 흐렸습니다! 그리고 비도 종종 조금씩 내리고 그치고 반복했습니다. 바로 헤난가든리조트로 이동했습니다. 헤난가든 진짜 너무 좋아요

Naver Blog

[스프링 스터디] #7 기능 구현 마무리, 리팩토링 2

[스프링 스터디] #7 기능 구현 마무리, 리팩토링 2 오늘 민준님과 마지막 기능구현 회의를 했습니다. 이번 주는 웹소켓을 이용한 채팅 기능과 게시글 조회수 + 카테고리 기능을 넣고 NoSQL인 Redis에 JWT 토큰 넣고 도커로 배포하는 건 다음 주에 할 것 같습니다. 덧붙여서 기능 구현한 것들 성능개선을 더 해야할 것 같습니다. 이번주에 계층형 카테고리를 구현하면 분명 문제가 생길텐데, 문제에 대해 고민해볼 시간이 필요할 것 같습니다. - 카테고리 기능 추가 https://blog.naver.com/sosow0212/222807639379 스프링부트 커뮤니티 API 서버 만들기 #9 계층형 카테고리 구현하기 스프링부트 커뮤니티 API 서버 만들기 #9 계층형 카테고리 구현하기 https://github.com/sosow0212/comm... blog.naver.com - 웹소켓 이용 채팅 기능

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #9 계층형 카테고리 구현하기

스프링부트 커뮤니티 API 서버 만들기 #9 계층형 카테고리 구현하기 https://github.com/sosow0212/community GitHub - sosow0212/community: Community Restful API Server - Main project Community Restful API Server - Main project. Contribute to sosow0212/community development by creating an account on GitHub. github.com 지적 및 피드백은 환영입니다 :) 안녕하세요. 이번에는 계층형 카테고리를 구현했습니다. 계층형 카테고리는 네이버 블로그에 있는 카테고리 기능과 비슷합니다. 아래와 같이 볼 수 있습니다. - 카테고리1 ㄴ 카테고리2 ㄴ 카테고리3 ㄴ 카테고리4 - 카테고리5 ㄴ 카테고리6 ㄴ 카테고리 7 ㄴ 카테고리 8 ㄴ 카테고리 9 위에와 같이 카테고리를 계속 이어나갈 수 있습니다. Cate

Naver Blog

[JPA] 상속관계 매핑이란? / 반복을 줄여주는 @MappedSuperClass

[JPA] 상속관계 매핑이란? / 반복을 줄여주는 @MappedSuperClass 상속관계 매핑 - 관계형 데이터베이스는 상속 관계가 없다. - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. - 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은? - 조인 전략 (각각 테이블로 변환) 테이블 정규화, 외래키 참조 무결성 제약조건 활용 가능, 저장공간 효율화의 장점이 있다. 다만 조회시 조인을 많이 사용해서 성능이 저하되고, 조회 쿼리가 복잡하고 데이터 저장 시 INSERT SQL을 2번 사용한다. - 단일 테이블 전략 (통합 테이블로 변환) 조인이 필요 없어서 일반적으로 조회 성능이 빠르고 조회 쿼리가 단순하다. 다만, 자식 엔터티가 매핑한 컬럼은 모두 null을 허용하고, 단일 테이블에 모든 것을 저장해서 테이블이 커지기 때문에 상황에 따라 오히려 조회 성능이 느

Naver Blog

[다이어트 4주차] 약 한달 간 몸무게 변화는?

[다이어트 4주차] 약 한달 간 몸무게 변화는? 다이어트 진행한지 한달정도 됐습니다. 다이어트 진행하면서 혼술도 끊고, 술자리도 많이 줄였습니다. 체중에 관계 없이 한 번 마음 먹으니 의지가 생겨서 술도 줄이게 되더라고요. 왜 예전에는 술로 힐링을 하고, 술자리 유혹을 못 견뎠는지..c 실수를 할 수도 있고, 득보다 실이 많기도 하고 이제는 운동과 관계없이 술을 좀 줄이는게 저를 생각해서도 좋을 것 같아요. 보라카이 여행 갔을 때를 제외하고 지난 한달동안 웨이트 약 40분 + 유산소 30~40분씩 매주 5회정도 운동을 했습니다. 식단은 아침은 마이프로틴 + 오트밀 / 점심은 쿠팡에서 산 다이어트 도시락 / 저녁은 밥 반공기 일반식 / 간식 계란 3개, 프로틴 바 1개 이렇게 해서 한달동안 6kg 빠졌습니다. 본격적으로 내년부터 취준을 시작하는데, 그 때는 시간도 여유도 없을 것 같아서 지금 체력도 기르고 몸도 만들면서 마음을 잡는게 중요할 것 같습니다. 그래서 다음 달도 열심히 해봐

Naver Blog

[JPA] 프록시, 즉시&지연 로딩, 영속성 전이, 고아 객체

[JPA] 프록시, 즉시&지연 로딩, 영속성 전이, 고아 객체 프록시 프록시는 실제 클래스를 상속 받아서 만들어지고, 실제 클래스와 겉 모양이 같다. 이론상, 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 그리고 프록시 객체는 실제 객체의 참조(target)를 보관하고, 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 즉 프록시 객체는 처음 사용할 때 한 번만 초기화하고, 초기화 할 때 프록시 객체가 실제 엔터티로 바뀌는 것은 아니다. 초기화되면 프록시 객체를 통해서 실제 엔터티에 접근이 가능하다. 프록시 객체는 원본 엔터티를 상속받는다. 따라서 타입 체크시 주의해야한다! (== 비교 실패, 대신 instance of 사용) 영속성 컨텍스트에 찾는 엔터티가 이미 있으면 em.getReference()를 호출해도 실제 엔터티로 반환한다. 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일 때, 프록시를 초기화하면 문제가 발생한다

Naver Blog

[JPA] 값 타입

[JPA] 값 타입 JPA의 데이터 타입 분류 Entity 타입 @Entity로 정의하는 객체, 데이터가 변해도 식별자로 계속해서 추적 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체, 식별자가 없고 값만 있으므로 변경시 추척 불가 값 타입 분류로는 기본값 타입 (자바 기본 타입, 래퍼 클래스, String), 임베디드 타입, 컬렉션 값 타입으로 나뉜다. String, int 같은 기본값 타입은 생명주기를 엔터티의 의존한다. 그리고 공유되면 절대 안된다. 그리고 Integer, Long 과 같은 래퍼 클래스나 String 같은 특수 클래스는 공유 가능한 객체이지만 변경하면 안된다. 임베디드 타입은 쉽게 말해서, 묶어낼 수 있는 타입이다. 예를 들면 주소(시, 도 등등) 같이 여러 개가 필요한 걸 하나로 묶는 그런 타입이다. 임베디드 타입의 사용법은 @Embeddable : 값 타입을 정의하는 곳에 표시 @Embedded : 값

Naver Blog

무쟈게 먹기만 한 부산 여행기

반년마다 함께 여행을 가는 대학교 친구인 태민이와 승범이랑 이번에도 여행을 갔습니다. 부산이라 차 타고 가는 건 포기하고 KTX 타고 가려고 내일로를 끊었는데, KTX는 전부 매진 돼서 ITX였나 무궁화였나 다른 열차를 타고 갔습니다. 새벽에 출발해서 너무 졸려워서 이 사진 찍고 바로 잠듬 눈 뜨니 도착했습니다. 태민이가 어디서 알아온 부산 밀면 맛집이라는 '원조 부산 밀면' 에 갔습니다. ㅋㅋ 이름부터 신뢰도 최고 이것저것 시켰는데, 솔직히 지금까지 부산에서 먹은 밀면 중 가장 별로였습니다. 근데 만두는 진짜 맛나요 이날 진짜 너무 더워서 걷기만 해도 막 땀이 나서 눈에 보이던 카페에 들어가서 아아 시원하게 싹 마시고, 빵이랑 빙수를 먹었습니다. 저기가 광안리 해수욕장 앞에 팥 전문 카페였나 뭐 그랬는데 엄청 맛있었습니다. 날씨가 진짜 미쳤죠? 저 해변을 지나면서 세 명 전부 내년엔 꼭 운동하고 오자고 그러는데 몇 년째 이 말하는지 모르겠네요.. 내년엔 정말 꼭.. 태민이가 해운대

Naver Blog

[JPA] 객체지향 쿼리 언어 - 1 / JPQL, QueryDSL, Native SQL, JDBC API + 페이징 API + 조인

[JPA] 객체지향 쿼리 언어 - 1 JPA는 다양한 쿼리 방법을 지원한다. - JPQL *** - JPA Criteria (이거 대신 QueryDSL 사용 권장) - QueryDSL - 네이티브 SQL - JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL 가장 단순한 조회 방법이다. JPA를 사용하면 엔터티 객체를 중심으로 개발 가능하고, 문제는 검색 쿼리이다. 검색을 할 때 테이블이 아닌 엔터티 객체를 대상으로 검색해야한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다. 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. JPA는 SQL을 추상화하는 JPQL이라는 객체 지향 쿼리 언어를 제공한다. -> SQL 과 문법 유사, SELECT, FROM, WHERE, GRUOP BY, HAVING, JOIN 지원 -> JPQL은 엔터티 객체를 대상으로 쿼리 -> SQL은 데이터베

Naver Blog

[Kotlin] 코틀린을 배워야하는 이유 및 특징, 자바와 비교해보기

[Kotlin] 코틀린을 배워야하는 이유 및 특징, 자바와 비교해보기 Kotlin 이란? 코틀린은 자바를 대체하기 위해 JetBrains 사에서(인텔리제이 만든 회사) 만들어진 언어이고, 2016년도에 정식으로 발표된 언어이다. 최신 패러다임을 적용해 Java의 약점을 개선하고 기존 Java에서 사용되는 JVM과 호환되게끔 만들어졌다. 성능 면에서도 자바와 비슷하다. 즉 기존 자바로 개발이 가능했던, 웹 & 안드로이드 개발에 Kotlin으로 대체할 수 있고, Javascript 및 Swift와의 연동 개발이 가능하다. 따라서 자바 + 스프링 조합이 아닌 코틀린 + 스프링 조합으로도 사용 가능하다. 자바와 같은 정적 타입 지정 언어라는 특징이 있고, 자바와 다르게 코틀린에서는 컴파일러가 문맥으로 변수 타입을 유추해서 타입 선언을 생략해도 된다. -> 이를 '타입 추론'이라고 부른다. 코틀린은 Null 이 될 수 있는 타입도 지원하기 때문에, Null 포인터로 인한 프로그램 중단도 예방

Naver Blog

[Kotlin] 기본적인 규칙, 변수 선언 및 자료형 알아보기, 형변환 및 배열

[Kotlin] 기본적인 규칙, 변수 선언 및 자료형 알아보기, 형변환 및 배열 기본적인 규칙 코틀린의 확장자 명은 .Kt 이다. fun main(args: Array<String>) { println("구문 끝에 세미콜론은 없어도 된다!") // 한 줄 주석 /** * 주석 2 * 여러 줄 주석 */ } 위에 코드처럼 주석의 경우 자바와 동일하고, 구문의 경우는 JS와 비슷하게 마지막에 세미콜론이 없어도 됩니다. 클래스 이름은 대문자로 시작하는 파스칼 표기법으로 시작해야합니다. Ex) ClassName 함수나 변수는 소문자로 시작하는 카멜 케이스로 시작해야합니다. Ex) functionName 변수 선언하기 코틀린에선 두 가지 방법으로 변수를 선언 할 수 있습니다. * var 일반적으로 통용되는 변수, 언제든 읽기 및 쓰기가 가능 * val 선언시에만 초기화 가능 및 중간에 값 변경 불가능 변수는 선언 위치에 따라 두가지 이름으로 불립니다. 클래스에 선언된 변수 Property (

Naver Blog

[Kotlin] 코틀린 타입추론과 함수 / 조건문, 반복문

[Kotlin] 코틀린 타입추론과 함수 타입추론이란 var a : Int 처럼 자료형을 명시해주는 것이다. 자료형 없이 선언을 해도 코틀린에서 알아서 자료형을 찾아주는데, 몇 가지 규칙이있다. 만약 var a = 100 이라는 정수형 리터럴을 할당하면 Int var b = 100L 은 Long var c = 12.45 는 double var d = 12.45f 은 float 마찬가지로 boolean, char 형도 같다. 함수 fun main() { println(add(1, 2, 3)) print(add2(1, 2, 3)) } // 매개변수와, 반환형의 타입을 써준다. fun add(a: Int, b: Int, c: Int): Int { return a + b + c } // 단일 표현식 함수 (타입 추론 가능하므로 반환형 타입 생략 가능) fun add2(a: Int, b: Int, c: Int) = a + b + c 뭔가 타입스크립트랑 비슷한 것 같다. 코틀린에서는 두 가지 타

Naver Blog

[명지대 스프링 멘토링] CRUD 게시판 만들기 실습 + 포스트맨

[명지대 스프링 멘토링] CRUD 게시판 만들기 실습 + 포스트맨 코딩을 하다가 혹은, 아래 글을 보고 모르는게 있으면 개인톡이 아니라 단체 톡방에 질문 올려주세요. 오늘은 라이브 코딩을 하면서 설명을 진행했습니다. 오늘 진행한 게시판 만들기는 1차 완성본으로, 고칠 점이 아직 많습니다. 다들 얼마나 따라 오는지 확인하면서 진행하겠습니다. 기억해야할 중요한 것만 다시 말씀 드리자면 다음과 같습니다. Entity 에서는 어노테이션 및 Id (기본키) 전략 설정 Service, Controller 에서는 @Service, @RestController 달아주고 @RequireArgsConstructor 와 함께 private final BoardService boardService; 처럼 객체 불러주기 (@Autowired 로 불러와도 되지만, 추천X) Service 클래스에서 @Transactional 사용하는 이유 (데이터 커밋 방식) Controller 에서 @PathVariable

Naver Blog

[JPA] 객체지향 쿼리 언어 - 2 / 경로 표현식, Fetch join,

[JPA] 객체지향 쿼리 언어 - 2 / 경로 표현식, Fetch join 경로 표현식 - .(점)을 찍어서 객체 그래프를 탐색하는 것 select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 상태 필드 (state field) - 단순히 값을 저장하기 위한 필드 ex) m.username 경로 탐색의 끝이고 탐색하지 않는다. 연관 필드(association field) - 연관관계를 위한 필드 단일 값 연관 필드 - @ManyToOne, @OneToOne, 대상이 엔터티 (ex. m.team) 묵시적 내부 조인(inner join) 발생하고, 탐색한다. 컬렉션 값 연관 필드 - @OneToMany, @ManyToMany, 대상이 컬렉션 (ex. m.orders) 묵시적 내부 조인 발생하고, 탐색하지 않는다. 경로 표현식 예제

Naver Blog

[스프링 스터디] #8 NoSQL Redis 적용과 CI/CD 및 배포를 시작하자

[스프링 스터디] #8 NoSQL Redis 적용과 CI/CD 및 배포를 시작하자 민준님과 진행한지 어느덧 꽤 되었고, 각자 기능을 잘 구현했습니다. 이제 거의 마지막을 보고있는데, 이번 주에는 인프라쪽을 조금 신경써야합니다. 먼저 JPA를 이용해서 N+1 문제를 찾아내고 개선을 해야하고, 연관관계 맺어진 거 조회시 성능 개선을 해야할 것 같습니다. 그리고 JWT RefreshToken 을 NoSQL인 Redis에 넣는 것까지 진행하면 기능적인 부분에서 구현은 모두 끝입니다. 이제는 백엔드의 두 번째 꽃인 인프라를 구현해야하는데 먼저 이번 주에는 다시 한 번 CI/CD & 도커 & 배포 공부를 한 번씩 더하고 배포를 진행하면 될 것 같습니다. 프론트엔드 부분은 선택이지만, 저는 리액트로 프론트엔드까지 구현 및 배포를 해서 풀스택 개발을 해볼 생각입니다. - Redis 로 JWT RefreshToken 빼기 https://blog.naver.com/sosow0212/2228254404

Naver Blog

[Redis] NoSQL Redis를 사용하는 이유 및 배경지식 알아보기

[Redis] NoSQL Redis를 사용하는 이유 및 배경지식 알아보기 Redis 배경지식 == Remote dictionary server 외부에서 Key-Value의 자료구조를 사용하는 서버라는 뜻이다. Key-Value 쌍에서 Integer 범위를 넘어가면서 Key값이 너무 많아졌다. (약 21억) Redis는 In-memory Data Structure Store로 메모리 상에 데이터를 저장하는 저장 서버이고, 다양한 자료구조를 제공한다. Redis를 알기 위해서 먼저 Cache의 개념을 알아야한다. Cache는 나중의 요청에 대한 결과를 미리 저장했다가 빠르게 사용하는 것이다. 기본적으로 데이터베이스는 컴퓨터가 종료되어도 데이터는 남아야해서 지금까지는 HDD, SDD에 데이터를 저장했다. 하지만 기술이 발달하고 하드웨어가 좋아지다보니 더 빠른 메인메모리에 데이터를 저장하면 어떨까라는 생각으로 Redis가 등장했다. Redis는 Database보다 더 빠른 Memory에 더

Naver Blog

[Docker] 도커는 무엇이고 왜 쓰는 것일까

[Docker] 도커는 무엇이고 왜 쓰는 것일까 도커를 알기 전에 아래 기업들의 백엔드 채용공고를 확인해보겠습니다. 네이버 백엔드 개발자 채용공고 카카오 백엔드 개발자 채용공고 토스 백엔드 개발자 채용공고 공통적으로 들어가는 말 보이시나요? Kubernetes (쿠버네티스), Docker(도커)가 빅테크 기업에서 많이 사용되고 있습니다. 백엔드 취업을 준비한다면, 도커는 반드시 알아야합니다. 도커는 컨테이너를 하나만 띄워서 사용하는 것이고, 쿠버네티스는 도커를 관리하는 툴이라고 생각하시면 됩니다. 즉 내가 한 개의 컨테이너만 관리하고 싶으면 도커가 낫고, 여러 개를 관리한다면 쿠버네티스를 사용하는게 좋습니다. 우리는 이 카테고리에서는 한 개의 컨테이너를 관리하는 도커에 대해 알아볼 예정입니다. 도커를 배우기 전에 먼저 컨테이너의 개념을 알아야합니다. 컨테이너란? 컨테이너는 애플리케이션과 애플리케이션을 구동하는 환경을 Host OS로부터 격리한 공간을 의미합니다. 컨테이너는 보통 마이

Naver Blog

[Kotlin] 흐름제어 + 클래스

[Kotlin] 흐름제어 + 클래스 코틀린은 배울 수록 자바와 비슷하면서도 다른 점이 있는 것 같습니다. 먼저 편리한 흐름제어에 대해 알아보겠습니다. fun main() { labelName@for (i in 1..10) { for (j in 1..10) { if(i ==1 && j ==2) break@labelName println("i : $i, j: $j") } } } 위에 소스코드처럼 레이블명을 지정해주면, 원하는 곳에서 break 명령어를 수행할 수 있습니다. 번거로운 작업이 필요 없고, 한 번에 레이블로 수행할 수 있다는 장점이 있습니다. 클래스 package classExam fun main() { var a = Person("이재윤", 1999) var b = Person("노윤재", 1999) // 보조 생성자 사용하는 인스턴스 var c = Person("이름") println(a.name) println(a.introduce()) } class Person(var

Naver Blog

[개발일기 #20] 22년 7월의 개발 공부 - 토이프로젝트, 코틀린, 해커톤, 알고리즘, 멘토링

[개발일기 #20] 22년 7월의 개발 공부 - 토이프로젝트, 코틀린, 해커톤, 알고리즘, 멘토링 드디어 1일1커밋 1년을 다 채워갑니다. 이번 달에는 방학이라 비교적으로 시간이 많았습니다. 진짜 여행도 많이 가고 놀기도 많이 놀아서 효율적으로 공부하지는 못한 것 같습니다. 항상 놀땐 놀고 쉴땐 쉬자 마인드였는데, 이번 달은 많이 논 것 같아서 돌아오는 달에는 정신차리고 다시 공부를 해야할 것 같습니다. 먼저 개인적으로 진행하는 토이 프로젝트 (커뮤니티 만들기)는 기능보다는 속도 및 최적화를 목표로 API를 개발하고 있습니다. 이제 기능은 다 구현해서 Redis 로 토큰 빼기 + 인프라 공부 후 배포할 예정입니다. 그리고 추가로 코틀린 + 스프링부트 조합을 사용해보고 싶어서 코틀린을 공부 중이고, JPA 또한 다시 한 번 공부했습니다. JPA는 공부 할 수록 더 어려워지는 것 같아요c 또 다른 이슈인 해커톤은 방학동안 자주 모여서 팀원들과 준비하였습니다. 알고리즘은 몇 개월 동안

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #10 Redis 도입 - JWT RefreshToken 빼기

프링부트 커뮤니티 API 서버 만들기 #10 NoSQL Redis로 JWT RefreshToken 빼기 https://github.com/sosow0212/community GitHub - sosow0212/community: Community Restful API Server - Main project Community Restful API Server - Main project. Contribute to sosow0212/community development by creating an account on GitHub. github.com 모든 질문 및 피드백은 환영입니다 :) 오늘 공부할 것 오늘은 NoSQL인 Redis 데이터베이스에 JWT RefreshToken을 넣을 생각입니다. 지금까지는 MySQL에 별도 테이블을 만들어서 Username, RefreshToken 으로 각각 저장했습니다. 이런 방법 보다는 오늘은 Key 와 Value 타입 즉 Username : Refr

Naver Blog

[AWS] EC2 서버 임대 및 Mac으로 접속하기 / EC2 서버와 방화벽

[AWS] EC2 서버 임대 및 Mac으로 접속하기 / EC2 서버와 방화벽 AWS EC2 서버 임대하기 AWS 회원가입 및 로그인을 하고 EC2 로 들어가줍니다. 여기서 위에 사진처럼 지역은 '아시아 태평양(서울)' 로 바꾸시면 됩니다. 그리고 인스턴스 시작을 누르고 아래 사진처럼 설정해줍니다. Ubuntu, 22.04 LTS t2.micro 그리고 밑에 내려서 키페어도 생성해줍니다. 스토리지 구성 볼륨은 30GB로 바꿔줍니다. 그리고 인스턴스 시작을 눌러줍니다. 그러면 위에 사진과 같이 인스턴스가 생성된 것을 확인할 수 있습니다. EC2 서버 Mac으로 접속하기 위에 인스턴스를 클릭해보면 위에 사진처럼 아래 퍼블릭 IPv4 주소를 확인 할 수 있습니다. (드래그 친 부분) 이 IPv4주소를 이용해서 우리의 EC2 서버에 접속할 수 있습니다. 서버에 접속하기 위해서 먼저 터미널로 키페어의 경로로 가줍니다. 이렇게 터미널의 위치를 키페어로 이동했다면, 이 키페어에다가 실행 권한을 줘

Naver Blog

[AWS] 리눅스 기본 명령어 / apt 알아보기 + 톰캣 설치

[AWS] 리눅스 기본 명령어 / apt 알아보기 + 톰캣 설치 리눅스 기본 명령어 터미널 코드 깨끗하게 정리 clear 현재 위치 확인 pwd 이동 명령어 cd/경로 cd ../ 취소 Control + C 현재 경로에 있는 모든 파일과 폴더의 상태 조회 ls ls -l (자세히 보기) 모든 파일 (숨김 및 기본파일) 확인 (.파일명 --> 숨김파일) ls --all ls -a 폴더 생성 mkdir 폴더명 폴더 제거 rm -r 폴더명 파일 생성 touch a.txt 파일 제거 rm a.txt 파일 복사 cp a.txt b.txt --> a.txt 를 b.txt 라는 이름으로 복사 파일 이동 mv b.txt user/ --> b.txt 를 user 폴더 안으로 이동 mv a.txt user/c.txt --> a.txt 를 user 폴더 안으로 이동하는데, 이름은 c.txt로 바꿔라 소프트 링크 (바로가기 생성) ln -s 파일명 파일명-link ln -s a.txt a-link.txt

Naver Blog

[AWS] 리눅스 명령어 ppa 저장소 사용 / 명령어 프로세스 이해

[AWS] 리눅스 명령어 ppa 저장소 사용 / 명령어 프로세스 이해 ppa 저장소 사용 저번에는 톰캣9 버전을 설치했습니다. 실습을 위해 톰캣 9 버전을 삭제하고 8 버전을 받아보겠습니다. (9 버전도 상관 없습니다! 단순 ppa 이해를 위해 재설치 하는 것입니다. 저는 tomcat9 버전으로 진행합니다.) sudo apt-cache search tomcat ==> tomcat을 시스템에서 찾는다. sudo apt remove tomcat9 ==> 설정 파일은 지우지 않음 sudo apt --purge remove tomcat9 ==> 설정 파일까지 모두 깨끗하게 지움 두 번째 방법으로 지워보겠습니다. 위에 터미널과 같이 성공적으로 삭제가 완료됐습니다. 이제 tomcat 8버전을 설치해보겠습니다. sudo apt install tomcat8 ==> 저장소에 없는 거라서 오류가 뜸 위에 소스코드처럼 저장소에 tomcat8은 없어서 ppa 저장소를 이용하여 추가해주겠습니다. https

Naver Blog

[명지대 스프링 멘토링] 팀프로젝트 설명 및 주의사항

[명지대 스프링 멘토링] 팀프로젝트 설명 및 주의사항 이제 멘토링의 끝을 보고있습니다. 지금까지 잘 따라와준 멘티님들 너무 고생하셨습니다 팀은 7명씩 2팀으로 나눴습니다. 아직 많이 배운 건 없어서, 어떤 주제로 팀프로젝트를 하고 어떤 식으로 할지 모를 수 있습니다. 오늘은 이에 대해 말씀드리려고 합니다. 주제 선정 및 기술 관련 인스타그램, 페이스북 등등 어떤 플랫폼이든 기본적인 API는 비슷합니다. (플랫폼마다 조금씩 차이가 있을 뿐) 기본적으로 대부분 CRUD 기능을 기반으로 API를 기반으로 프론트엔드가 페이스북처럼 보이게 작업하면 페이스북이 되는거고, 인스타나 게시판처럼 보이게 만들면 그렇게 되는 것입니다. 그래서 일단 주제 선정에 대해서는 너무 고민하지 않으셔도 됩니다. 다만 우리가 고민해야할 점은 어떤 API를 만들어야하는지만 고민하면 됩니다. (ex. User, Board, Letter API를 만드는등 기능적인 부분 CRUD만 하면 됩니다.) 다만 프로젝트를 만들면서

Naver Blog

[AWS] 리눅스 vi 에디터 사용, chmod, chown 로 권한 주기, find, 파일 입출력

[AWS] 리눅스 vi 에디터 사용, chmod, chown 로 권한 주기, find, 파일 입출력 vi 사용하기 기존에 만들었던 a-link.txt 와 a.txt 는 rm 명령어로 먼저 지워주세요. 그 후에 아래 명령어를 치면 a.txt가 생성되고 수정할 수 있게 됩니다. vi a.txt # a.txt 를 생성하고 수정할 수 있다. # vi == vim 편집기로 가지면, 알파벳 i 를 입력해서 입력모드(INSERT) 로 바꿔줍니다. 아무 문자를 다 입력했다면, ESC를 누르고 : 키 누르고 wq 누르고 엔터를 눌러줍니다. (:q! 명령어는 강제 탈출) ESC, :, wq, Enter 위에 순서대로 입력해주시면 됩니다. 그리고 cat a.txt 명령어로 내용을 볼 수 있습니다. 만약에 또 수정하고 싶다면 다시 한 번 vi 명령어로 들어가면 됩니다. chmod, chown 사용하기 su root # 루트에 접속 (처음에 비밀번호 생성해야함) su passwd root # 루트 패스워드

Naver Blog

[다이어트 두 달차] 9kg 감량기

[다이어트 약 두 달차] 9kg 감량기 다이어트 한지 7주정도 됐습니다. 일 수로 따지면 50일 정도 됐습니다. 바쁜 날이 많아서 그런 날 빼고는, 매 주마다 4번씩 가려고 노력 했고, 매 번 3분할로 나눠 고강도 웨이트 + 인터벌 러닝을 진행했습니다. 나중에 요요 올 수 있는 좋지 않은 방식이지만, 운동을 못 가는 날에는 정말 조금만 먹었습니다. 하여튼 이렇게 두 달 정도 운동과 식단을 해서 오늘 몸무게를 측정해보니 약 9kg이 빠졌습니다. 운동하는 날은 꼭 세 끼씩 탄단지 맞춰서 챙겨먹었습니다. 운동을 안한 날에는 일반식 반씩 1~2끼 정도 먹었다고 보시면 됩니다. 두 달차 운동 분할은 하체 + 삼두 / 등 + 이두 / 가슴 + 어깨 이런 식으로 해주었고, 턱걸이는 항상 해줬습니다. 웨이트도 웨이트지만, 다이어트 할 때 가장 효과적이었던 건 인터벌 러닝이 가장 좋았던 것 같습니다. 다음 달에도 화이팅입니다!!

Naver Blog

[명지대 스프링 멘토링] Response 만들기, 예외처리 총 정리, 테스트 코드 알아보기

[명지대 스프링 멘토링] Response 만들기, 예외처리, 테스트 코드 알아보기 4주차 멘토 활동 정리입니다. 오늘 배운 내용은 코드도 중요하긴 하지만, 내용적인 부분이 더 중요합니다. ( 왜 사용하는지에 대한 이유 ) 따라서 이번 글에서는 코드를 기재하지 않을 예정입니다. 그래서 아래 내용을 충분히 보고 이해한 다음에 아래 깃허브 링크를 통해 코드를 보고 복습하시는 걸 추천드립니다. 혹시나 깃을 봐도 모르신다면, 말씀해주세요! https://github.com/sosow0212/mentoring GitHub - sosow0212/mentoring: 22년도 명지대학교 스프링 멘토활동 간단 프로젝트 22년도 명지대학교 스프링 멘토활동 간단 프로젝트. Contribute to sosow0212/mentoring development by creating an account on GitHub. github.com 지난 시간에는 프로젝트 API 즉 기능을 설계했다면, 이번 시간에는 지난

Naver Blog

[자바] 백준 2293: 동전1 DP풀이 (점화식 구하기)

https://www.acmicpc.net/problem/2293 2293번: 동전 1 2293번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 동전 1 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.5 초 (추가 시간 없음) 4 MB 44399 20155 15148 45.417% 문제 n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도 사용할 수 있다. 사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다. 입력 첫째 줄에 n, k가 주어진다... www.acmicpc.net 전형적인 DP 문제입니다. 난이도는 골드5 이고, 점화식을 구한다면 쉽게 풀 수 있습니다. 문제 설명은 n가지 동전을 이용해서 k원을 만들 수 있는 경우의 수를 구하는 문제입니다. 먼저 정답 코드부터 보고 설명하겠습니다. import

Naver Blog

[Docker] 도커로 Spring boot(Gradle) 구축 및 실행하기

[Docker] 도커로 Spring boot 구축 및 실행하기 오늘은 스프링부트를 도커로 구축해보고 실행해보겠습니다. 먼저 개발 진행 환경은 맥북M1(애플 실리콘 칩) 입니다. 도커 구축을 테스트할 스프링부트 프로젝트를 하나 만들어줍니다. 프로젝트 만드실 때, 디펜던시는 Spring Web 만 넣으시고, Gradle 및 Java11 로 진행해주시면 됩니다. 위와 같이 RestController 를 이용해서 빠르게 API 하나를 만들어줍니다. 그 다음에는 도커 구축을 위해 jar 파일을 생성해야합니다. 위에 사진과 같이 Gradle - Tasks - build - bootjar 를 클릭해줍니다. 그러고나면 위에 사진처럼 패키지 build - libs 경로에 .jar 가 생긴 것을 볼 수 있습니다. 위에 사진에서는 Dockerfile 을 만들어주었지만, 처음 진행하면 위에 도커파일이 없습니다. libs 아래 Dockerfile 하나를 만들어서 (확장자명 없음) 아래와 같은 소스코드를 입

Naver Blog

[AWS] 배포를 위해 알아야하는 지식, AWS 등장 배경 알아보기

[AWS] 배포를 위해 알아야하는 지식, AWS 등장 배경 알아보기 배포 기본 지식 클라우드 서비스를 활용하기 위해 기본지식을 알아야한다. -> AWS, Linux, Network 클라우드 서비스에 내 프로젝트를 단순 배포하기 위한 환경을 구축한다 -> EC2 == Iaas (인프라, 즉 물리적 컴퓨터 구축) 클라우드 서비스에 내 프로젝트 배포를 간편하게 한다. -> ShellScript 클라우드 서비스에 환경 구축 없이 내 프로젝트를 배포한다 -> AWS Elastic Beanstalk == Paas (플랫폼이 환경 제공) 클라우드 서비스에 배포 자동화를 구축한다. CI/CD -> GithubAction / Travis / Jenkins 클라우드 서비스에 무중단 배포를 한다. -> 로드밸런서, 롤링배포 정적 IP 할당을 위해 Network road Balancer 활용하기 배포 진행 순서도 1. 프로젝트 생성(Springboot + Test code) 2.Github Push 3.

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #4 - 지옥의 Board API 만들기, 게시판 CRUD + 이미지 업로드

스프링부트 커뮤니티 API 서버 만들기 #4 지옥의 Board API 만들기, 게시판 CRUD + 이미지 업로드 질문 및 피드백은 환영입니다! https://github.com/sosow0212/community GitHub - sosow0212/community: Community service (RestAPI Server) Community service (RestAPI Server). Contribute to sosow0212/community development by creating an account on GitHub. github.com 오늘은 Board API를 만들었습니다. 게시판에 관련 돼서 생각할게 몇 가지가 있습니다. 먼저 기본적인 게시판의 CRUD 기능 구현 및 유저 댓글, 유저가 즐겨찾기 할 경우 및 추천 수에 따른 추천글 등록을 신경써야합니다. 그 중에서 오늘은 게시판 기능 + 이미지 업로드를 구현했습니다. 코드 설명 먼저 가장 중요한 Board Entit

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #5 - 게시글 좋아요 및 즐겨찾기 구현하기

스프링부트 커뮤니티 API 서버 만들기 #5 - 게시글 좋아요 및 즐겨찾기 구현하기 https://github.com/sosow0212/community GitHub - sosow0212/community: Community service (RestAPI Server) Community service (RestAPI Server). Contribute to sosow0212/community development by creating an account on GitHub. github.com 질문 및 피드백은 환영입니다! 오늘은 지난 번에 이어서 게시판 기능을 추가했습니다. 에타 게시판을 모티브로 좋아요와 즐겨찾기를 구현했습니다. 사용자가 좋아요를 누르면 게시글의 좋아요 수가 +1이 되고, 다시 버튼을 누르면 좋아요가 -1 이 됩니다. 그리고 좋아요 수가 일정 수 이상 도달하면, 인기 게시물로 선정이 됩니다. 즐겨찾기도 마찬가지로 POST 요청으로 +- 1이 증가 되고, 유저 페이지

Naver Blog

[Effective Java] #2 - 모든 객체의 공통 메서드

[Effective Java] #2 - 모든 객체의 공통 메서드 Object 란? 객체를 만들 수 있는 구체 클래스이지만 보통 상속해서 사용한다. Object에서는 fianl이 아닌 메서드 (equals, hashCode, toString, clone, finalize)는 모두 오버라이딩(재정의)를 염두하고 설계된 것이라서 재정의 시 지켜야 하는 일반 규약이 명확하다. 그래서 Object를 상속하는 모든 클래스들은 이 메서드들을 일반 규약에 맞게 재정의 해야한다. equals 메서드는 동치관계를 구현하며 다음을 만족해야한다. - 반사성 (null이 아닌 모든 참조 값 x에 대해 x.equals(x) = true) - 대칭성 (null이 아닌 모든 참조 값 x,y에 대해 x.equals(y) = true 라면 y.equals(x) = true) - 추이성 (null이 아닌 모든 참조값 x,y,z 에 경우 x->y, y->z, x->z 도 true이다) - 일관성 (null이 아닌 모든

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #6 - 댓글 구현하기

스프링부트 커뮤니티 API 서버 만들기 #6 - 댓글 구현하기 https://github.com/sosow0212/community GitHub - sosow0212/community: Community service (RestAPI Server) Community service (RestAPI Server). Contribute to sosow0212/community development by creating an account on GitHub. github.com 질문 및 피드백은 환영입니다 :) 오늘은 댓글 API를 만들었습니다. 일단은 간단하게 댓글만 만들었지만, 아마 다음주부터 게시글 계층 카테고리 + 쪽지 무한 스크롤 + 대댓글 기능도 구현해야할 것 같습니다. 먼저 Comment Entity 입니다. package yoon.community.entity.comment; import lombok.*; import org.hibernate.annotations.OnDele

Naver Blog

[Effective Java] #3 - 클래스와 인터페이스

[Effective Java] #3 - 클래스와 인터페이스 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨서 구현과 API를 깔끔하게 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작에는 전혀 개의치 않는다. 이는 정보 은닉(캡슐화) 라는 것을 통해서 하는데, 정보 은닉의 장점은 여러가지가 있다. 개발 속도 증가, 시스템 관리 비용 저하, 성능 최적화에 도움, 재사용성 증가 등등 정보 은닉을 위해 자바에서 다양한 장치를 제공한다. 각 요소의 접근성은 그 요소가 선언된 위치와 접근 제한자 (private, public ..) 로 정해진다. 이 접근 제한자를 효율적으로 사용하는 것이 정보 은닉의 기본이다! 기본 원칙으로는 모든 클래스와 멤버의 접근성을 가능한 좁혀야 한다. 즉 소프트웨어가 올바르게 동작하는 수준으로 항상 가장 낮은 접근 수준을 부여해야한다. 패키지 외부에서 쓸 일이 없다면 private로 하는 것이 좋다. 왜냐하면 public 으로 선언하면

Naver Blog

[다이어트 2주차] 습관화

[다이어트 2주차] 습관화 다이어트 시작한지 2주차가 되었습니다. 몇 달동안 살이 급격하게 쪄서 그런지 빠지는 것도 빠르게 빠지는 것 같습니다. 아마도 수분이 빠졌겠지만, 그래도 수치상으로는 3키로가 빠졌습니다. 얏호 항상 앉아서 공부하고 밥 먹기도 귀찮아서 늦게 먹으면서 폭식하고 그랬는데, 이런 악습관과 혼술은 싹 끊었습니다. 처음에는 되게 집에서 술 마시고 싶고, 먹고 싶은 것도 너무 많았는데, 삼시세끼 일정한 시간에 맞춰서 먹다보니깐 적응이 된 것 같습니다. 앉아있는 비중이 많은만큼, 코어 운동도 열심히 하고있습니다. 이번주에는 하루 빼고 모두 운동을 했습니다. 이제는 꾸준히 하는 것만 남았습니다!

Naver Blog

[JPA] 영속성 내부 동작 방식

[JPA] 영속성 내부 동작 방식 먼저 JPA에서 가장 중요한 2가지는 객체와 관계형 데이터베이스 매핑하기 + 영속성 컨테이너입니다. 영속성 컨텍스트를 먼저 이해해보겠습니다. EntityManagerFactory 에서는 고객이 요청을 보낼때마다 고객 별로 EntityManager 를 생성해서 줍니다. 그리고 EntityManager는 내부적으로 데이터베이스 커넥션을 써서 DB를 사용하게 됩니다. 영속성 컨텍스트 - JPA를 이해하는데 가장 중요한 용어 - Entity를 영구 저장하는 환경이라는 뜻 - EntityManager.persist(entity); persist 메소드는 DB가 아닌 영속성 컨텍스트에 저장한다! 영속성 컨텍스트는 논리적인 개념으로 보이지 않고, 엔터티 매니지를 통해서 영속성 컨텍스트에 접근합니다. Entity의 생명주기 - 비영속 (new/transient) -> 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 // 객체를 생성한 상태 (비영속) Member

Naver Blog

[JPA] 연관관계 (단방향 매핑, 양방향 매핑, 주의사항)

[JPA] 연관관계 (단방향 매핑, 양방향 매핑, 주의사항) 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용하여 연관 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 테이블과 객체 사이에는 이런 큰 간격이 있다. 단방향 연관관계 Member 와 Team 단방향 매핑 // User @Id @GeneratedValue @Column(name = "USER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // Team @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; 이렇게 두고, 팀을 바로 멤버에 넣을 수 있다. 양방향 연관관계와 연관관계의 주인 (가장 중요) // Us

Naver Blog

[스프링 스터디] #4 API 설계 및 방향 잡기

[스프링 스터디] #4 API 설계 및 방향 잡기 오늘은 민준님과 API 설계를 했습니다. 계속 바뀔 수도 있지만, 일단 이대로 진행하기로 했습니다. 민준님과 비동기/동기를 공부하기 위해 방법을 찾다가 웹소켓을 이용한 화상채팅 기능도 넣기로 했습니다. 코딩 스타일 같은 경우도 비슷하게 하고자, 깃허브에서 다른 사람 코드들 보면서 참고하고, 코드를 최대한 객체지향적으로 짜려고 얘기를 많이 했습니다. 이번주는 '유저 + 쪽지' 기능을 구현하기로 했고, 어떻게 효율적으로 코드를 작성할지 고민을 많이 해보고 개발을 해야할 것 같습니다! 유저 API 구현 https://blog.naver.com/sosow0212/222776097438 스프링부트 커뮤니티 API 서버 만들기 #2 - User API 만들기 스프링부트 커뮤니티 API 서버 만들기 #2 - User API 만들기 https://github.com/sosow0212/communi... blog.naver.com 메시지 API 구현

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #2 - User API 만들기

스프링부트 커뮤니티 API 서버 만들기 #2 - User API 만들기 https://github.com/sosow0212/community GitHub - sosow0212/community: Community service (RestAPI Server) Community service (RestAPI Server). Contribute to sosow0212/community development by creating an account on GitHub. github.com 오늘은 User API를 만들었습니다. 기능에 대해 간단하게 설명하자면 '전체 유저 조회, 개별 유저 조회, 유저 정보 수정, 회원탈퇴' 기능이 있습니다. 이렇게 만들면서 Exception도 추가하고, Swagger 설정 및 SecurityConfig 도 일부분 바꿔줬습니다. 테스트코드까지 전부 만들었으니, 비슷한 걸 구현해보고자 하시는 분들은 소스코드 참고하시면 많은 도움 될 겁니다! 포스팅으로는 간단하게

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #3 - Message API 만들기

스프링부트 커뮤니티 API 서버 만들기 #3 - Message API 만들기 https://github.com/sosow0212/community GitHub - sosow0212/community: Community service (RestAPI Server) Community service (RestAPI Server). Contribute to sosow0212/community development by creating an account on GitHub. github.com 질문 및 피드백은 환영입니다! 오늘은 Message API 를 만들었습니다. Message API의 핵심 기능은 유저 간 쪽지 기능이라고 생각하시면 됩니다. 무한 스크롤 기능은 곧 추가하고 글로 올리겠습니다. Message API 의 기능은 다음과 같습니다. 저번에도 포스팅 했지만, 여기서 중요한 점은 보낸 쪽지를 삭제한다면, 유저에게 보낸 쪽지는 안 보이지만, 받은 사람에게는 보입니다. (받은 사람도

Naver Blog

[명지대 스프링 멘토링] #1 계획하기, 수업 로드맵 작성

[명지대 스프링 멘토링] #1 계획하기, 수업 로드맵 작성 이번에 과 코딩 동아리에서 스프링 멘토링을 진행하게 됐습니다. 아무래도 과에서 스프링 백엔드로 취업을 하고 싶은 사람은 많지만, 어디서 알려주는 사람이 없어서 대부분은 독학으로 하고있다고 들었습니다. 저는 운 좋게 스프링을 미리 시작하고 여러가지 삽질을 경험하면서 경험이 쌓이다보니 다행스럽게 과 동기나 후배들에게는 노하우를 전해줄 수 있게 됐습니다. 알려준다는 행위를 통해서, 복습을 할 수도 있고 같은 과 사람들에게 가르칠 수 있다는 보람과 학습 발표력 또한 좋아질 것 같습니다. 감사하게도 20명정도 신청해주셔서 더욱 책임감 있게 확실한 자세로 수업을 해야겠습니다. 스프링 강의는 대부분 JSP, Thymeleaf 같은 템플릿 엔진으로 프로젝트 구현하는 방식으로 진행 되는데, 저는 이번 멘토링에서는 Rest API에 대해 알려줄 생각입니다. 아무래도 요즘은 프론트/백이 확실히 분업화 되는 추세다 보니 JSP는 각자 공부 시킬

Naver Blog

[개발일기 #19] 22년 6월의 개발 공부 - 기말고사, 프로젝트, 당근마켓 불합격

[개발일기 #19] 22년 6월의 개발 공부 - 기말고사, 프로젝트, 당근마켓 불합격 6월 초에는 학교 기말고사가 있어서 코딩을 제대로 하지 못했습니다. 거의 2~3주동안 알고리즘만 한 문제씩 풀었네요 ㅠㅠ 1일 1커밋 도전한게 엊그제 같은데 지금 보니 정말 많이 채웠습니다. 너무 뿌듯하고, 확실히 도전과제처럼 채우려다 보니 알아서 공부하게 되는 것 같습니다. 6월에 기말고사를 보면서, 당근마켓 합격 결과도 기대했는데 결국 떨어졌습니다. 뭐 아직 부족한게 있어서 그렇겠죠.. 빅테크 기업에 가기 위해서 더욱 열심히 해야겠다고 생각하고 시험에 전념했습니다. 항상 어떤 결과가 나오게 되면 스스로 피드백을 하는데 이번에 불합격에서 가장 큰 이유는 아무래도 RestAPI 프로젝트가 부실하지 않았나 싶습니다. 지원할 때 넣었던 프로젝트가 아무래도 예전에 한 템플릿 기반 프로젝트다 보니 현업 스타일과 안 맞은 것 같습니다. 얼른 API 서버 프로젝트를 만드는게 좋을 것 같습니다. 그래서 이번 달

Naver Blog

[다이어트 1주차] 다이어트 시작, 운동과 식단

[다이어트 1주차] 다이어트 시작, 운동과 시작 하루종일 앉아서 공부만 하고, 고칼로리 음식 시켜먹고 저녁에 혼술도 자주하다보니 살이 급격하게 쪘습니다. 도저히 이대로는 안되겠다 싶어서 배달음식과 혼술도 끊고 다이어트 계획을 세우고 바로 시작했습니다. 먼저 체지방 감량을 하고 린매스업을 하려고 아마 약 한달간은 체지방 감량 위주의 운동과 식사를 할 것 같습니다. 규칙적인 일상이 중요해서 오전 9시 일어나서 닭가슴살 + 요거트에 오트밀을 먹고 점심은 쿠팡에서 시킨 고단백 다이어트 도시락 먹고 저녁은 밥 반공기 + 일반식으로 먹고 자기 전 아르기닌 한 포 먹고 중간중간 계란 3개 먹고 운동은 점심 혹은 저녁에 하고 있습니다. 운동 후 마이프로틴 마시면서 하루 총 단백질 양을 110g 으로 맞춰 먹고있습니다. 쿠팡 고단백 다이어트 도시락입니다. 양은 적지만, 진짜 존맛 저녁으로는 일반식 먹는데, 양파 + 당근 + 소고기를 간장이랑 볶아서 먹고있습니다. 운동은 3부위로 나눠서 고강도 웨이트

Naver Blog

[스프링 스터디] #5 코드 피드백 및 JPA

[스프링 스터디] #5 코드 피드백 및 JPA 오늘은 민준님과 API 코드를 보면서 피드백을 했습니다. 민준님이 JPA 단방향/양방향 매핑 부분에서 막히신 것 같아서 간단하게 설명해드리고, 진행을 했습니다. 저 또한 만들다보니 JPA를 다루는게 은근 헷갈리고 신경쓸게 많아서 따로 공부를 더 해야할 것 같다고 생각했습니다. 지난 번 과제에서 쪽지 무한 스크롤 제외하고 모두 구현했는데 쪽지 무한 스크롤 부분은 조금 더 고민해봐야할 것 같습니다. 테스트 코드도 지금은 컨트롤러 단위 테스트만 진행하는데, 공부할겸 더 확장시켜서 진행해야할 것 같아서 공부를 시작했습니다. 이번 주 과제는 게시판 + 댓글 + 기존 코드 리팩토링입니다. #1 게시글 CRUD 구현 및 이미지 처리 https://blog.naver.com/sosow0212/222784877111 스프링부트 커뮤니티 API 서버 만들기 #4 - Board API 만들기, 게시판 CRUD + 이미지 업로드 스프링부트 커뮤니티 API 서

Naver Blog

[개발일기 #18] 첫 코드 피드백을 받고, 고쳐나가고 배워야 할 것들에 대해서, To do

[개발일기 #18] 첫 코드 피드백을 받고, 고쳐나가고 배워야 할 것들에 대해서, To do 방금 정말 존경하는 선배님에게 부탁 드려서 코드 피드백을 받았습니다. 누군가에게 조언은 받은 적은 있지만, 직접 코드까지 봐주시며 피드백 해주셔서 더욱 특별한 경험이었습니다. 선배님이 객관적으로 생각하셨을 때, 저의 코드를 보고 든 생각은 전반적으로 기술적인 어필이 부족하다고 하셨습니다. 이에 덧붙여서 특정 부분에 딥하게 들어가거나, 나름 해결하기 어려운 고민에 대해서는 경험한게 별로 없다고 느껴지고, 단순 CRUD로 기능 구현이 주로 이룬다고 느껴졌다고 하셨습니다. 또한 말씀 들어보니, 테스트 코드도 정말 잘 짜야되겠더라고요. 공부하면서 더 딥하게 들어가고 있다고 생각하지만, 아직은 부족한게 많은 것 같습니다. 사실 기본적인 기능은 무작정 키보드 뚜드린다면 만들 수 있다지만, 정말로 선배님 말씀처럼, "그게 최선인지"에 대한 고민과 "더 나아질 수 없는지"에 대한 고민은 많이 안 했습니다.

Naver Blog

스프링부트 커뮤니티 API 서버 만들기 #1 - 로그인 기능 + Validation + Exception 구현

스프링부트 커뮤니티 API 서버 만들기 #1 - 로그인 기능 + Validation + Exception 구현 프로젝트 소개 (계속 수정 예정) 이번에 진행하는 프로젝트는 커뮤니티 제작입니다. 단순한 기능말고, 더 깊게 생각해서 꼼꼼하게 API를 제작할 예정입니다. 효율적인 DB설계 및 최소 조회와 효율적인 JPA 사용이 중요하다고 생각해서 이 부분에 초점을 맞출 생각입니다. 단순 API 개발이지만, 타 개발자와 협업한다고 생각하고 진행합니다. 글에서 자세한 내용은 다루지 않고, 전반적인 흐름 및 간단한 설명만 작성합니다! 자세히 보고 싶으신 분들은 글 하단에 깃허브를 봐주세요. 진행 내용은 다음과 같습니다. (계속 수정 예정) - 로그인 - 게시판 CRUD - 계층형 카테고리 - 계층형 대댓글 - 페이지 번호 페이징 처리 - 무한 스크롤 페이징 처리 - 검색 - 관리자 페이지 - 배포 (자동화, 도커, AWS) 프로젝트 설정 (Java 11, Spring boot) 2. Depen

Naver Blog

명지대 파이썬 기말고사 핵심 ppt 정리 (클래스 다음부터)

파이썬 기말고사 정리 (클래스 다음부터) 키 정렬하기 dictionary 에서 key가 만들어진 순서를 기억 itertools 인수들을 차례로 순회 누적합 구하기 --> for문 이용해서 구해도 됨 pprint() 깔끔하게 출력하기 --> 출력이 예쁘게 나오면 pprint() 랜덤값 random --> 로또 번호 구하기 같은 곳에서 응용 가능 (sample() 사용해서) 범위 내에서 임의의 정수 값 반환 ASCII 아스키코드 ++ 비트연산자 시간 관련 모듈 //// import time now = time.time() print(time.ctime(now)) # Sat Jun 11 16:44:31 2022 캘린더창 만들기 아래 코드 참조 파일 입출력 --> 점프투파이썬 04-3 참조 + 파일에서 위치 찾기 : seek() + requests + beautifulSoup 모듈 확인하기 (크롤링)

Naver Blog

[안드로이드] 기말고사 정리

[안드로이드] 기말고사 정리 https://github.com/sosow0212/Android-study GitHub - sosow0212/Android-study: Android study Android study. Contribute to sosow0212/Android-study development by creating an account on GitHub. github.com 7강 (OptionMenu, Dialog, Toast, ContextMenu) OptionMenu 만들기 (옵션 메뉴는 우측 상단에 점3개 누르면 내려오는 메뉴들임) menu.xml 만들어서 <menu> .. <item> </item> ... </menu> 만들어주기 MainActivity 에서 onCreateOptionsMenu 상속 받아서 MenuInflater 로 구현하기 깃허브 study_7a 참조 * menu.xml 말고 자바코드로 메뉴 사용 가능 메뉴에서 사진 선택하고, 사진 돌리기 마찬가지

Naver Blog

[Github] 깃허브 코드리뷰를 해보자!

[Github] 코드리뷰를 해보자! 깃허브에는 여러가지 기능이 있습니다. 오늘은 코드리뷰를 하는 방법에 대해 알아보도록 하겠습니다. 배경지식 우리가 코드 리뷰를 하기 위해서는 Pull Request (PR)을 해줘야합니다. Pull Request 에 대해 간단하게 설명하자면, 깃허브로 협업을 할 때, 백엔드는 API를 나눠서 설계하는등 역할을 나눕니다. 각자 작업을 하고 그걸 master 브랜치에 합쳐줘야하는데, 이때 master로 합쳐주는 것을 Merge 라고 합니다. 이 Merge를 통해서 각자 작업한 것들을 master 브랜치(메인)에 전부 합쳐주는데, Merge 전에는 Pull Request 라는 작업을 합니다. Pull Request는 각각의 브랜치가 커밋을 하고 master로 Merge하기 전에 한 번더 확인하는 과정입니다. 즉 코드리뷰는 Pull Request 과정에서 Merge 하기 직전에 코드리뷰를 하는 것입니다. 이때, 코드리뷰를 통해서 코드가 문제가 없다면 Mer

Naver Blog

명지대 파이썬 기말고사 문제 및 풀이

명지대학교 파이썬 기말고사 문제 및 풀이 (배종우 교수님) 기말고사는, 중간고사에 비해 난이도가 있는 느낌이었습니다. 이번 시험은 1시간 50분 동안 보는 시험이고, 시간이 많이 부족하다는 후기가 많았습니다. 1학년 전공인만큼 코딩을 처음 배우는 신입생 기준으로는 정말 어려웠을 거라고 생각합니다. 하지만 파이썬 뿐만 아니라 C, C++, JAVA 모두 기말고사는 중간고사에 비해 난이도가 확 올라갑니다. 파이썬이 그나마 조금 쉬운 편입니다 ㅠㅠ 준비하시는 분들은 한 번 풀어보시고 모르는게 있다면 댓글 남겨주시면 설명 도와드리도록 하겠습니다. 파이썬 시험을 준비하실 때 정말 좋은 사이트가 하나 있는데 https://wikidocs.net/book/1 점프 투 파이썬 ** 점프 투 파이썬 오프라인 책(개정판) 출간 !! (2019.06) ** * [책 구입 안내](https://wikidocs.net/4321) 이 책은 파이썬 ... wikidocs.net 위에 링크가서 공부하시면 정말

Naver Blog

[스프링 스터디] #3 프로젝트 기본 틀 잡기 + Auth API + 테스트코드 작성

[스프링 스터디] #3 프로젝트 기본 틀 잡기 + Auth API + 테스트코드 작성 시험기간이라서 업로드가 늦었습니다. 이번 달은 시험 기간이라서 스터디를 안했습니다. 이번 주 목요일부터 다시 시작합니다! 오늘 포스팅할 건 이번 주 과제에 대한 내용입니다. 저번에 같이 하시는 민준님과 안정적이고 심도있는 프로젝트를 만들기 위해 서로 대화를 많이 했고, '각자 기본 틀 잡기 + 로그인 API 구현 + 테스트 코드 작성' 을 목표로 이번주 과제를 진행했습니다. 이번주 과제에 대한 코드 및 자세한 내용은 아래 링크를 통해서 확인 하실 수 있고, 깃허브 주소도 함께 올립니다. https://blog.naver.com/sosow0212/222747372730 스프링부트 커뮤니티 API 서버 만들기 #1 - 로그인 기능 + Validation + Exception 구현 스프링부트 커뮤니티 API 서버 만들기 #1 - 로그인 기능 + Validation + Exception 구현 프로젝트 소.

Naver Blog

[자바] 백준 10026 : 적록색약 (DFS 문제 풀어보기)

[자바] 백준 10026 : 적록색약 (DFS 문제 풀어보기) https://www.acmicpc.net/problem/10026 10026번: 적록색약 10026번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 적록색약 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 32972 19046 14829 57.277% 문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있... www.acmicpc.net 골드5 난이도 그래프 탐색 문제입니다. DFS 입문하기 정말 좋은 문제라고 생각합니다. 문제를 요약하자면, 주어지는 그래프에서 일반 사람이 그래프를 볼때, 보이는 영역의

Naver Blog

[스프링부트] #4 쉽게 Rest API를 만들어보기 (쪽지 기능 구현하기)

[스프링부트] #4 쉽게 Rest API를 만들어보기 (쪽지 기능 구현하기) 오늘은 쪽지 보내기를 구현해보겠습니다. A 유저가 B 유저에게 쪽지를 보내면, A유저의 보낸 쪽지함에는 보낸 쪽지로 남고, B유저의 받은 쪽지함에는 받은 쪽지로 남게 됩니다. 만약에 B유저가 받은 쪽지함에서 이 편지를 지우게 되면, B유저의 받은 쪽지함에서는 이 편지가 지워지게 되지만, A유저의 보낸 쪽지함에서는 지워지지 않습니다. 만약 B유저가 받은 쪽지함에서 편지를 삭제하고, A유저도 보낸 쪽지함에서 편지를 삭제하면, 데이터베이스에서도 삭제하게끔 만들었습니다. 오늘 구현할 편지 보내기에서 기능은 1. 편지보내기 2. 받은 편지함 보기 3. 보낸 편지함 보기 4. 받은 편지 삭제하기 5. 보낸 편지 삭제하기 이렇게 5가지 입니다. 오늘은 조금 까다로울 수 있습니다. Message 엔터티를 추가하는데, Message 엔터티에는 @ManyToOne 어노테이션을 이용해서, Receiver, Sender 라는 이

Naver Blog

[네이버 d2] '그런 REST API로 괜찮은가' 후기

[네이버 d2] '그런 REST API로 괜찮은가' 후기 이번 강의는 REST API 강의로 되게 유명합니다. 그래서 들어봐야지 생각만하다가, 오늘 들었습니다. 역시 명강의답게, 초보자들도 이해하기 쉽고, REST에 대한 원초적인 의미를 알 수 있었습니다. 강의 정리 REST 분산 하이퍼미디어 시스템(예: 웹)을 위한 아키텍쳐 스타일 REST API REST 아키텍쳐를 따르는 API 출처: 그런 REST API로 괜찮은가 Uniform interface의 제약조건이란?! 출처: 그런 REST API로 괜찮은가 self-descriptive-messages 즉 메시지는 스스로를 설명해야한다. 'GET / HTTP / 1.1' 'HOST: www.example.org' 이런게 예시이다. 단순히 'GET / HTTP / 1.1' 이런 건 self-descriptive-messages 에 해당되지 않는다. HATEOAS 는 애플리케이션의 상태는 Hyperlink를 이용해 전이되어야한다. 출

Naver Blog

[자바] 백준 1926 : 그림 (DFS + BFS 풀이) / DFS, BFS 추천 문제

[자바] 백준 1926 : 그림 (DFS + BFS 풀이) / DFS, BFS 추천 문제 https://www.acmicpc.net/problem/1926 1926번: 그림 1926번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 검색 그림 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 14667 6311 4455 42.084% 문제 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다. 그림의 넓이란 그림에 포함된 1의 개수이다. 입력 첫째 줄에 도화지의... www.acmicpc.net '2667번 단지번호붙이기' 문제와 거의 똑같다고 보시면 됩니다. 처음에 DFS, BFS 공부할 때에는, 이런 문제가 진짜 최고입니다! 처음에는 DF

Naver Blog

[스프링부트] #5 쉽게 Rest API를 만들어보기 (Jwt + Spring Security로 회원가입 및 로그인하기, 리팩토링) + 깃허브 링크

[스프링부트] #5 쉽게 Rest API를 만들어보기 (Jwt + Spring Security로 회원가입 및 로그인하기, 리팩토링) 안녕하세요. 원래 회원가입 및 로그인은 보통 처음에 진행하는데, 어쩌다보니 다섯 번째 포스팅에서 하게 됐습니다. 오늘은 Spring Security + Jwt 를 이용해서 회원가입 및 로그인 기능을 만들 것이고, User Entity 권한 추가 및 로그인 기능을 이용해서, 지금까지 컨트롤러에 임의로 1번 유저로 넣었던 것들을 로그인한 유저의 정보를 바탕으로 기능이 작동하도록 코드 리팩토링을할 것입니다. Spring Security + Jwt 는 구글에 검색해보시면, 설명을 정말 잘해주시는 분들이 많으니 이번 포스팅을 통해 프로젝트 제작을 하기 전에 꼭 개념을 익히고 따라하시는게 좋습니다. 전반적으로 오늘 다뤄볼 내용은 다음과 같습니다. 1. Spring Security + Jwt 디펜던시 추가 및 config 설정하기 2. 코드 리팩토링하기 3. 로그인

Naver Blog

Spring Security + JWT 조금 더 살펴보기

Spring Security + JWT 조금 더 살펴보기 Spring Security 와 JWT는 자주 쓰는만큼 조금 더 공부해봤습니다. JWT에 대한 글은 아래 링크로 대체합니다. https://blog.naver.com/sosow0212/222719613386 [스프링부트] JWT 인증 파헤치기 및 JWT + Spring security로 회원가입 로그인 구현해보기 스프링부트] JWT 인증 파헤치기 및 JWT + Spring security로 회원가입 로그인 구현해보기 JWT (... blog.naver.com Spring Security Spring Security 는 공격 보호 및 사용자 정보 검증 및 유저 정보 관리를 도와줍니다. 즉, 인증(Authenticate)과 인가(Authorize) 를 담당하는 프레임워크입니다. 기본적으로 Spring Security는 세션 & 쿠키 방식으로 인증을 합니다 Spring Security의 서블릿 보안 지원은 Servlet Filter

Naver Blog

[스프링 스터디] #2 JWT, Spring Security 공부 및 Entity 설계, 테스트 코드 협의

[스프링 스터디] #2 JWT, Spring Security 공부 및 Entity 설계, 테스트 코드 협의 오늘은 Spring Security + JWT 를 발표했습니다. 확실히 개념을 이해하게 됐습니다. 그리고 다음주까지 User Entity 만들고, 회원가입 및 로그인을 구현하고나서 테스트코드까지 작성하기로 했습니다. 다음주에는 만든 거 각자 발표를하고, 설계를 하고 본격적으로 개발을 시작할 예정입니다.

Naver Blog

[스프링부트] #2 쉽게 Rest API를 만들어보기(JPA로 게시판 구현하기 및 유저 정보 넣기, Dto로 데이터를 예쁘게 받자)

[스프링부트] #2 쉽게 Rest API를 만들어보기 (JPA로 게시판 구현하기 및 유저 정보 넣기, Dto로 데이터를 예쁘게 받자) 지난 포스팅에 이어서 오늘은 Rest API를 이용해서 게시판 만들기를 알아보려고 합니다. 코드는 1편부터 쭉 이어지니, 따라 해보고 싶으신 분들은 1편부터 쭉 따라하시거나, 추후에 다 만들고나서 이번 시리즈의 처음 포스팅, 혹은 마지막 포스팅에 깃허브 링크를 넣어둘테니 확인 해보시면 좋을 것 같습니다. 시작하기 앞서서 이해의 도움이 되고자 먼저 코드 및 간단한 설명을 보시고, 밑에 자세한 설명을 보시는게 좋습니다. UserRepository의 코드가 추가 됐습니다. import org.springframework.data.jpa.repository.JpaRepository; import self.study.entity.User; public interface UserRepository extends JpaRepository<User, Integer

Naver Blog

[자바] 2019 '카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임' 알고리즘 풀이

[자바] 2019 '카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임' 알고리즘 풀이 https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. "죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 x 1" 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차... programmers.co.kr 구현 + 스택을 이용해서 푼 문제입니다. 일단 문제가 좀 길어서 헷갈릴 수 있는데, 간단

Naver Blog

[스프링부트] #3 쉽게 Rest API를 만들어보기 (게시판 댓글 구현하기)

[스프링부트] #3 쉽게 Rest API를 만들어보기 (게시판 댓글 구현하기) 오늘은 지난 번에 이어서 게시글에 댓글 다는 것을 만들어봤습니다. 마찬가지로 DTO를 이용해서 예쁘게 값을 주고 받았습니다. 지난번 게시글 CRUD 제작과 거의 똑같다고 보시면 됩니다. 댓글 수정은 안 만들었고, '작성, 불러오기, 삭제' 기능만 구현했습니다. JWT + Spring Security 로그인 기능과 특정한 유저가 작성한 글 및 작성한 댓글 보는 건 추후에 구현하도록 하겠습니다. 시작에 앞서서 먼저 추가된 코드부터 말씀드리겠습니다. Comment import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import javax.persi

Naver Blog

[명지대 파이썬 멘토링 #7] 파이썬 클래스 배우기 2 - 상속, 오버라이딩, 모듈

[명지대 파이썬 멘토링 #7] 파이썬 클래스 배우기 2 - 상속, 오버라이딩, 모듈 오늘은 클래스의 상속에 대해 배울 예정입니다. 클래스의 상속이란 말 그대로 물려받는다는 뜻이고, 이 개념을 클래스로 풀어 설명하자면, 어떤 클래스를 만들 때, 다른 클래스의 기능을 받아서 쓸 수 있게 해주는 것입니다. 클래스의 상속을 쓰는 이유는 기존 클래스를 변경하지 않고, 기능을 추가하거나 기존 기능을 변경하기 위해서 사용합니다. 즉 쉽게 말해서, 코드 수가 1000줄이 되는 A클래스가 있는데, B클래스를 하나 만들 생각인데 A클래스와 되게 비슷한데, 기능 몇가지가 추가 되는 경우가 있다고 칠 때, B클래스를 만들기 위해서 기존 A클래스의 코드를 재활용 하면 되는데 굳이 다시 만들 필요가 없겠죠? 그럴 경우 새로 만들 B클래스는, 기존에 있던 A클래스를 상속받고 기능을 추가 해주면 됩니다. 컴퓨터의 자원(CPU, RAM 등등 ...)은 한정적입니다. 요즘 나오는 컴퓨터가 좋다고 하더라도, 개발자의

Naver Blog

Agile - 애자일 개발 방법론에 대해 알아보기

Agile - 애자일 개발 방법론에 대해 알아보기 개발자 면접 후기를 보면 종종 애자일 개발 방법론에 대해 몰라서 대답을 못했다는 사람들을 많이 봤습니다. 그리고 기술 블로그나, 테크톡을 봐도 '애자일' 이라는 단어는 많이 나옵니다. 사실 지금까지 공부하는데에 있어서 애자일을 몰라도 지장은 없었지만, 여러 사람들이 '애자일'을 물어보고 블로그에 정리한다는 뜻은 중요하니깐 그러겠죠? '애자일' 너무 생소한 단어라서 감도 안 왔는데, 이왕 생각난 김에 오늘 정리 한 번 해볼 생각입니다! Agile (애자일) 이란? Agile Software Development 소프트웨어 개발 방법론의 하나로, 처음부터 끝까지 계획을 수립하고 개발하는 폭포수(Waterfall) 방법론과는 달리 개발과 함께 즉시 피드백을 받아서 유동적으로 개발하는 방법이다. 정식 명칭은 애자일 소프트웨어 개발(Agile[1] Software Development). 한국에서는 주로 애자일 방법론 이라고 부른다. 켄트 벡

Naver Blog

[개발일기 #17] 22년 5월의 개발 공부 - RESTful 하게 개발하기, 해커톤 및 새로운 팀프로젝트

[개발일기 #17] 22년 5월의 개발 공부 - RESTful 하게 개발하기, 해커톤 및 새로운 프로젝트 이번 달에도 매일 꾸준하게 공부했습니다! 매일 2~3문제씩 알고리즘을 푸는데, 많이 풀었지만 아직도 알고리즘 푸는 건 좀 벅찰 때가 많습니다. 이제 슬슬 코테 볼 일이 많아질텐데, 얼른 더 잘해지길 그리고 이번 달에는, 데이터베이스 조회는 최소화 해야 한다는 것을 배웠습니다. 전에는 잘 몰라서 막 조회하고, JPA도 효율적으로 안 썼음을 반성하고, 시험 끝나고 바로 리팩토링 할 생각입니다. 또한 4~5월달이 되면서, 파이썬 백엔드 프레임워크인 Flask를 가볍게 공부했습니다. 언젠가 서버 통신을 많이 할텐데, 가볍게라도 공부해서 협업할 때 피해가 되지 않고 싶고, 플라스크를 배워보고 싶기도 했습니다. 저의 생각이지만, 맛 본 결과 스프링에 비해서, 입문하기에 쉽고 조금 더 직관적이었습니다. 그리고 이번에 풀스택으로 혼자서 건강관리 프로젝트를 진행하고있는데, 기존에 템플릿 엔진으

Naver Blog

[자바] 백준 7562 : 나이트의 이동 (BFS 문제 풀어보기)

[자바] 백준 7562 : 나이트의 이동 (BFS 문제 풀어보기) https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 7562번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 나이트의 이동 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 37165 18534 13859 48.925% 문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 ... www.acmicpc.net 먼저 이 문제는 BFS로 접근해서 풀어야합니다. DFS가 아닌 BFS로 풀어야 하는 이유는, 문제에서 '최소' 라는 말이 나왔기 때문입니다. 둘다 완전 탐색은 맞지

Naver Blog

[스프링 스터디] #1 프로젝트, 공부 계획 및 회의록

[스프링 스터디] #1 프로젝트, 공부 계획 및 회의록 부트캠프 및 취업시 기술면접을 위한 스프링부트 2인 스터디입니다. 공장식 프로젝트보다는, 현업에 가깝고 신입이 할 수 있을만큼 최대한 완벽하게 만들자는 목표로 만들어진 스터디이고, 중간중간 기술 개념은 꼭 짚고 넘어가기로 했습니다. 백엔드 프로젝트인만큼 템플릿 엔진을 위한 프로젝트 설계보다는, RESTful 하게 만드는게 목표입니다. 1회 회의는 브레인스토밍으로 빠르게 프로젝트 관련 아이디어를 내고, 고쳐나가는 식으로 진행했습니다. 1회 회의 - 프로젝트 계획 (22.05.15) 프로젝트 주제 - 커뮤니티 사이트 만들기 1. 기능적인 측면 (임시) 회원가입 및 로그인, 개인 및 어드민 페이지, 게시판, 유저 간 쪽지 및 채팅, 기본적 글(CRUD)기능, 무한스크롤, 국제화, 카테고리 나누기, 글 추천(추가로 추천을 많이 받으면HOT글), 회원간 결제?, 공지(카테고리 나누기로 해결 가능), 악성회원 정지기능, 댓글 2. 사용할

Naver Blog

[명지대 파이썬 멘토링 #5] 파이썬 함수 배우기

[명지대 파이썬 멘토링 #5] 파이썬 함수 배우기 먼저 함수는 무엇일까요? 함수는 다양한 프로그래밍 언어에서, 보통의 경우 반복되는 작업을 줄이기 위해서 사용합니다. 예를 들어 아래와 같은 경우를 생각해보면 됩니다. 변수 a, b의 입력을 계속 받아서 이 두 변수를 더하는 걸 만들고 싶을 때, 지금까지는 아래와 같은 방법으로 했을거에요. # 함수 배우기 이전 a = 1 b = 2 print(a + b) a = 2 b = 3 print(a + b) a = 3 b = 4 print(a + b) 하지만 아래와 같이 함수를 만들어 놓는다면, 조금 더 편하고 빠르게 계산을 할 수 있습니다. def plus(a, b): print(a+b) plus(1, 3) plus(2, 4) plus(3, 5) 코드가 훨씬 깔끔해지고 코드 수가 줄은 걸 확인할 수 있습니다. 위와 같은 간단한 예제는 사실 함수를 굳이 안 써도 되지만, 엄청나게 많은 양의 데이터를 각각 다뤄줘야 되는 경우에는 함수를 쓰면 작업

Naver Blog

[스프링부트] JWT 인증 파헤치기 및 JWT + Spring security로 회원가입 로그인 구현해보기

스프링부트] JWT 인증 파헤치기 및 JWT + Spring security로 회원가입 로그인 구현해보기 JWT (Json Web Token) 란 ? 먼저 JWT를 공부하기 앞서, 기존에 인증 체계는 Cookie, Session으로 이뤄졌습니다. 쿠키는 노출 될 때, 민감정보(로그인 정보 같은)가 전부 노출이 되어서 보안에 좋지 않다는 이유와, 쿠키 조작의 가능성, 다른 브라우저간 공유 불가능 및 4KB라는 적은 사이즈로 충분한 데이터를 담을 수 없는 이유로 쿠키를 온전히 인증에 사용하지 않습니다. 세션 또한 쿠키에 비해 좋다고 하더라도, 문제점이 있습니다. 세션 저장소에 문제가 발생하면, 인증 체계가 무너지고 이전에 다른 인증된 유저 또한 인증이 불가해진다는 점과 stateful하기 때문에, http의 장점을 발휘하지 못한다는 점, 세션 ID가 탈취 됐을 때, 클라이언트로 위장하는 보안의 약점이 있습니다. 그리고 사용자가 많아지면 메모리를 많이 차지하고, 매번 요청마다 세션 저장소

Naver Blog

[풀스택] 건강관리 서비스 제작기 #2 - 기본 기능 구현

[풀스택] 건강관리 서비스 제작기 #2 - 기본 기능 구현 리액트와 스프링부트 서버를 연결시키고 프론트엔드 기본적인 뷰 구성 및 백엔드의 기본적인 기능을 구현했습니다. 기존 jsp 같은 템플릿 엔진을 사용해서 만드는 방법에 너무 익숙해서 처음에 걱정을 좀 했는데 다행히 서버 통신 하는데 지장이 없었습니다. 회원가입부분입니다. 리액트 서버에서 데이터를 스프링 서버로 POST 요청을 보내고, 스프링 서버에서 회원가입 로직을 처리하고 return 또한 잘 응답해주는 것을 확인 할 수 있습니다. 로그인 부분에서 처음에 많이 막혔습니다. 기존 Spring Security을 통해 로그인을 하면, x-www-form-urlencoded 방법으로 폼 로그인을 사용했는데, 공부를 하다가 알게 된 사실인데 x-www-form-urlencoded 방법은 보안 및 여러 문제 때문에 이제는 잘 사용하지 않는 방법이라고 그래서 JSON 통신으로 더 좋은 로그인 방법이 뭘까 공부하다가 JWT + Spring

Naver Blog

[명지대 파이썬 멘토링 #6] 파이썬 클래스 배우기

[명지대 파이썬 멘토링 #6] 파이썬 클래스 배우기 클래스라는 개념은 처음 볼 때 함수와 헷갈릴 수 있습니다. 보통 클래스를 쓰는 경우는 어떤 경우에 쓰는지 예시를 보겠습니다. 만약에 사람 관리 프로그램을 만든다고 했을 때, 각각의 사람에게는 name, age, address 의 정보를 넣고 싶을때 기존에는 다음과 같이 했습니다. name1 = "yoon" age1 = 24 address1 = "yongin" name2 = "hong" age2 = 23 address2 = "seoul" 이런식으로 사람 100명 만든다고 생각해보면 생각만해도 되게 힘들죠? 그래서 나온게 클래스입니다. class를 사용하는 방법은 다음과 같습니다. class 클래스명 : 수행할 문장 class human: def __init__(self, name, age, address): self.name = name self.age = age self.address = address yoon = human("yo

Naver Blog

[풀스택] 건강관리 서비스 제작기 #3 - 게시글 및 댓글 백엔드 로직 구현하기

[풀스택] 건강관리 서비스 제작기 #3 - 게시글 및 댓글 백엔드 로직 구현하기 오늘은 게시글 및 댓글 작성 기능을 스프링부트로 구현했습니다. 이제 통계 기능 및 운동 관련 기능만 추가하면 백엔드는 얼추 끝이 날 것 같습니다. 항상 템플릿 엔진만 쓰다가 RestAPI 기반으로 코드를 작성하다보니 생각보다 많은 오류들을 발견했습니다. 예를 들면, 포스트맨으로 작동 테스트를 할 때, 무한참조가 발생하는 문제들은, 템플릿 엔진을 썼을 때에는 JSON 형식으로 뿌리는게 아니라서 확인도 못하고, 틀린지도 몰랐는데, 기존에 하던 방식대로 코드를 짜니 무한참조 오류가 발생해서 @JsonIgnoreProperties에 대해 더 잘 알게 됐고, JPA에 대한 지식도 조금씩 더 쌓여가는게 느껴집니다. 얼른 기능 개발하고, DTO 구현해서 RestAPI 표준으로 데이터 전송하는 것을 목표로 도전해봐야겠습니다!

Naver Blog

[자바] 백준 13417 - 카드 문자열 (그리디)

[자바] 백준 13417 - 카드 문자열 (그리디) 백준 13417 문제입니다. https://www.acmicpc.net/problem/13417 13417번: 카드 문자열 13417번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 검색 카드 문자열 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 2038 1212 1040 62.016% 문제 N장의 카드가 일렬로 놓여있다. 각 카드에는 알파벳이 하나씩 적혀있다. 태욱이는 가장 왼쪽에 있는 카드부터 차례대로 한 장씩 가져올 수 있다. 가장 처음에 가져온 카드는 자신의 앞에 놓는다. 그다음부터는 가져온 카드를 자신의 앞에 놓인 카드들의 가장 왼쪽, 또는 가장 오른쪽에 놓는다. 태욱이는 모든 카드를 다 가져온 후에 자신의 앞... www.acmicpc.net 그리디 문제입니다. 처음 입력된 알파벳을 저장해주고, 그 후부터 들어오는 알파벳이 마지막 값보다 클 경우와 마지막 값보다 작으면서 처음 값보다 큰

Naver Blog

[개발일기] 번아웃, 취업, 연락

[개발일기] 번아웃, 취업, 연락 3학년이 되면서 취업에 대한 압박이 시작 됐습니다. 처음에는 매일매일 성실히 공부하고, 공부 한 걸 올리자라는 마음으로 깃허브에 1일 1커밋 도전 및 늘 블로그에 기록하자는 마음을 먹었습니다. 처음에는 그 도전이 강박이 됐지만, 이제는 강박이 습관과 일상이 되었습니다. 처음과 다르게 이제는 여행을 가든, 뭐든 어디서든 노트북을 가져가서 공부하는게 습관이 되었고, 그런 습관이 이제는 그럭저럭 나쁘지 않은 것 같다고 생각했는데, 요즘 들어서는 공부에 대한 회의감이 많이 들었습니다. 내 기준에서는 100점이라는 기준으로 정말 최선을 다해서 공부하지만 남들이 한 걸 보면 150점 200점으로 뽑아내니깐, 타고난 머리를 탓하기도 하고 "덜 성실했던가" 라는 스스로에 대한 회의감이 들면서 번아웃이 왔습니다. 산다는게 여러 변수로 인해, 노력과 비례해서 좋은 성과를 뽑을 수는 없기 때문에, 늘 노력을 기반으로 효율적인 방법을 추구했는데, 요즘은 스스로가 노력은

Naver Blog

[스프링부트] #1 쉽게 Rest API를 만들어보기(로그인, DTO, 예외 처리, JSON 리턴)

[스프링부트] #1 쉽게 Rest API를 만들어보기(로그인, DTO, 예외 처리, JSON 리턴) 오늘은 회원가입 및 로그인 로직으로 Rest API를 만들어 봤습니다. 예시로 쓰는 회원가입 및 로그인 로직은 간단하게 이해하는게 목적이라서 BCrypt 등등 전부 생략했습니다. 시작하기 앞서, 우리가 오늘 배우는 방식에 대해서 간단히 설명해드리자면 Dto, 예외처리, JSON 다루기 입니다. 전부 간단하게 설명하는 것에 초점을 뒀습니다. 경험해본 바로는 이런 개념들이 구글링하면 전부 깊은 내용이고, 초보자 입장에서는 어려워서, 이 세가지가 연결되기도 힘들고 삽질을 많이하게 되더라고요. 그래서 최대한 쉽고 얕게 세가지를 설명하고 이해시키는게 이 포스팅의 목적입니다. 이제 정말 들어가기 앞서서 간단하게 예습을 하고 가자면 (정확하진 않지만 이런 느낌으로 이해하시면 돼요) 1. Dto란 예민한 정보의 노출을 막기 위해서 Entity 대체품으로 사용하는 것이다. 2. 예외처리란 말 그대로

Naver Blog

[스프링부트] RestAPI 반환을 맞춤으로 만들어보자

[스프링부트] RestAPI 반환을 맞춤으로 만들어보자 RestAPI 를 사용하면서, 반환을 해주는 방법은 여러가지가 있습니다. 오늘은 1. Object형 반환 2. ResponseEntity 반환 3. Custom으로 만들어서 반환 4. ResponseEntity + Cusom 반환 이렇게 세 가지의 반환 방법에 대해 알아보려고 합니다. 반환을 잘 해야하는 이유는, 프론트엔드 개발자들과 협업할 때, 서로 작업을 편하게 하기 위해서입니다. 예를들면 프론트엔드 개발자들이 'user 정보를 data라는 껍데기에 담아주세요~~' 이런 식으로, 리턴을 잘 해주면, 코드의 가독성도 높아지고 업무의 효율성도 높아지게 됩니다. 아래 케이스들은 모두 당연하게도 @RestControlle가 붙은 경우입니다. 1. Object형 반환 // Board형으로 전달 @GetMapping("/api/v1") public Board apiV1() { Board board = new Board(); board.

Naver Blog

[스프링부트] Gradle 환경에서 Swagger 3.0 적용해보기 (API 명세서)

[스프링부트] Gradle 환경에서 Swagger 3.0 적용해보기 (API 명세서) Swagger 란? 간단히 말해서 스웨거는 우리가 만든 REST API 서비스를 설계, 빌드, 문서화, 소비하는 일들을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크입니다. 이런 말은 너무 어려우니깐, 쉽게 말하자면, 스웨거는 보통 협업할 때, 많이 씁니다. 즉 내가 어떤 API를 만들었는지 문서화 시켜서 프론트나, 다른 백엔드 개발자들과의 협업을 조금 더 효율적이고 편하게 만들어줍니다. Gradle 환경에서 Swagger 적용해보자 1. build.gradle 에서 아래와 같은 dependencies 를 추가해줍니다. // Swagger implementation 'io.springfox:springfox-boot-starter:3.0.0' 디펜던시 추가 후에 코끼리를 눌러서 디펜던시 적용을 시켜주고, 프로젝트 실행을 해보세요. 만약에 프로젝트가 실행되지 않고, Swag

Naver Blog

[자바] 백준 2667 - 단지번호 붙이기 풀이 (DFS + 그래프탐색)

[자바] 백준 2667 - 단지번호 붙이기 풀이 (DFS + 그래프탐색) https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 2667번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 단지번호붙이기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 115282 49127 30980 40.449% 문제 <그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된... www.acmicpc.net 실버1 그래프탐색, DFS, BFS 문제입니다. 저는 DFS를 이용해서 풀었고, 설명은 주석에 달아놓았습니다. DFS, BFS 문제는 처음에 이해하기 너무

Naver Blog

[풀스택] 건강관리 서비스 제작기 #1 준비하기

[풀스택] 건강관리 서비스 제작기 #1 준비하기 최대한 현업과 비슷하게 프로젝트를 진행해보고자 이번 토이 프로젝트를 시작했습니다. 1인 프로젝트이고, 사용 기술 스택은 프론트엔드 : React 백엔드 : Spring boot, Flask DB : MariaDB 이렇게 생각하고있습니다. 프로젝트 개요 및 기능 1. 건강 관리 및 식단 및 운동 관리에 대한 기능을 제공해주는 프로젝트입니다. 2. 추가 계획으로는 파이썬 Flask 서버에서는 헬스 관련 커뮤니티에 특정 검색어(ex. 보충제) 를 검색하면 '___ 보충제' 같은 데이터를 뽑아서, 현재 유저들에게 인기있는 정보를 추출해줄 생각입니다. /user 유저 관련 /register, login 로그인 관련 /menu/~~ 정보 제공 /admin 어드민 페이지 프로젝트 진행시에 주의할 점 1. Git 커밋 메시지 신경쓰기 # Git 커밋 메시지 feat: 새로운 기능 fix: 버그 해결 docs: 문서 변경 style: formattin

Naver Blog

[React] vscode에서 리액트 자동 정렬시 이상하게 되는 문제 해결 방법, 자동으로 Import 입력이 안 되는 경우 해결하기

[React] 리액트 자동 정렬시 이상하게 되는 문제 해결 방법, 자동으로 Import 입력이 안 되는 경우 해결하기 풀스택으로 개발을 해보려고 오랜만에 리액트를 공부중인데, 컴포넌트 입력시, 자동으로 Import 되지도 않고 vscode에서 맥 기준 커맨드 + k + f 로 정렬을 해도 이런식으로 정렬이 됐습니다. 그래서 검색을 해보니깐 다음과 같이 해결할 수 있었습니다. 맥 기준 " Command + , " 키 눌러서 위에 사진과 같이 설정으로 들어간 후에, 사진에서 동그라미 친 부분을 클릭하여 settings.json 으로 들어가줍니다. settings.json 맨 마지막 줄에 "files.associations": { "*.js" : "javascriptreact" }, 코드를 입력해주면 문제가 전부 해결됩니다!

Naver Blog

[스프링부트] Spring 서버에서 Flask서버의 API 받아오기

[Spring] Spring 서버에서 Flask서버의 API 받아오기 - 서버끼리 통신 - 플라스크 스프링 통신 - Flask to Spring 최근에 파이썬 Flask 개발을 시작했습니다. 목적은 파이썬이 데이터분석에 적합하기 때문에, 파이썬으로 데이터 처리를 하고, Flask 를 통해 API를 배포하고 스프링으로 받아서, 프로젝트를 진행하기 위해서입니다. 어쨋든, 나중에 프로젝트를 하려면 다른 서버에서 데이터를 스프링서버로 불러와야하므로 연습할겸 공부해봤습니다. 결과를 먼저 보자면 spring 서버는 8080포트를 사용하고, 스프링서버의 /work 경로로 들어가면, Flask의 서버에 GET 요청을 보내서 Flask 서버에 있는 데이터를 가져 온 것입니다. 플라스크 서버 포트 = 7000 /get 주소로 GET 요청을 보내면 미리 저장해둔 data 리턴 스프링부트 서버 포트 = 8080 /work 주소로 GET 요청을 보내면, 플라스크 서버의 데이터 받아옴 스프링부트 컨트롤러 p

Naver Blog

[DB] 데이터베이스 개념 탈탈 털어보기

[DB] 데이터베이스 기본 개념 데이터베이스의 기본 개념 데이터 : - 현실에서 관찰 및 측정해서 수집한 사실이나 값 정보 : 데이터를 처리한 활용할 수 있는 결과물 정보처리 : 데이터에서 정보를 추출하는 과정 또는 방법 정보 시스템 : 데이터를 수집 했다가, 조직 운영에 유용한 정보를 만들어 주는 수단 데이터베이스 : 정보 시스템 안에서 데이터를 저장하고, 필요할 때 제공하는 역할을 담당 데이터베이스의 정의 : - 공유 데이터 통합 데이터 - 저장 데이터 - 운영 데이터 데이터베이스의 특징 : - 실시간 접근 - 내용 참조 기반 - 동시 공유 - 계속 변화 데이터의 분류 : - 정형 데이터 (엑셀) - 반정형 데이터 (JSON, XML) - 비정형 데이터 (워드, 이미지) 파일시스템 VS 데이터베이스 파일 시스템 : - 데이터를 파일로 관리하기 위해 파일을 생성, 삭제, 수정, 검색하는 기능을 제공하는 소프트웨어 파일 시스템의 문제점 : - 같은 내용의 데이터가 여러 파일에 중복

Naver Blog

[안드로이드] 모바일프로그래밍 중간고사 (~고급위젯) 후기

모바일프로그래밍 안드로이드 중간고사 (~고급위젯) 후기 1번 문제 주어진 대로 풀면 되는 문제입니다. 자바 코드 짜는 건 쉬워서, 레이아웃만 신경써주면 되는 문제입니다. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <Chronometer android:id="@+id/chronometer" android:layout_w

Naver Blog

[FastAPI] 파이썬 백엔드, FastAPI 란? / FastAPI 시작해보기

파이썬 백엔드, FastAPI 란? 안녕하세요. 최근에 파이썬 웹 프레임워크인 FastAPI 공부를 시작했습니다. FastAPI의 장점은, 파이썬의 기능을 담고 있고, 다른 파이썬 웹 프레임워크인 django, flask 보다도 빠른 성능, 코드 버그 감소, 쉽게 사용의 장점이 있습니다. 비교적 최근에 나온 프레임워크라서 자료가 많이 없지만, 엄청나게 빠른 속도로 성장중입니다. https://fastapi.tiangolo.com/ko/tutorial/ 자습서 - 사용자 안내서 - 도입부 - FastAPI 자습서 - 사용자 안내서 - 도입부 ¶ 이 자습서는 FastAPI 의 대부분의 기능을 단계별로 사용하는 방법을 보여줍니다. 각 섹션은 이전 섹션을 기반해서 점진적으로 만들어 졌지만, 주제에 따라 다르게 구성되었기 때문에 특정 API 요구사항을 해결하기 위해서라면 어느 특정 항목으로던지 직접 이동할 수 있습니다. 또한 향후 참조가 될 수 있도록 만들어졌습니다. 그러므로 다시 돌아와서

Naver Blog

[Flask] 파이썬 백엔드, Flask 란? / Flask 시작해보기

[Flask] 파이썬 백엔드, Flask 란? / Flask 시작해보기 Flask 알아보기 지난 포스팅으로 파이썬 백엔드 프레임워크인 FastAPI를 간단하게 알아봤습니다. DB 연결 및 CRUD 기반 간단한 프로젝트를 생성 해봤는데, 확실히 자바 스프링에 비해서 간단하다는 장점이 있는데, 아직은 자료가 너무 없는 것 같습니다. 메인으로 파이썬 백엔드 프레임워크를 쓸 것도 아니라서 차라리 자료가 많은 Flask를 하는게 나을 수도 있겠다라고 생각했습니다. https://flask-docs-kr.readthedocs.io/ko/latest/ Flask의 세계에 오신것을 환영합니다. — Flask 0.11-dev documentation Flask 머리말 경험있는 프로그래머를 위한 머릿글 설치하기 빠르게 시작하기 튜토리얼 템플릿 Flask 어플리케이션 테스트하기 어플리케이션 에러 로깅하기 어플리케이션 에러 디버깅 설정 다루기 시그널(Signals) 플러거블 뷰(Pluggable View

Naver Blog

[Flask] CRUD 작성해보기 - 1 (Notion으로 HTML 만들어보기)

[Flask] CRUD 작성해보기 - 1 (Notion으로 HTML 만들어보기) 파이썬 Flask를 이용해서 CRUD 웹사이트를 만들어보기 API 개발이 아닌, Templates 를 이용한 CRUD 개발입니다! 먼저 강의를 듣다가 꿀팁을 배웠는데, 지금까지 api 서버를 만드는 거 말고 바로 html로 렌더링 해줄 때, 직접 html 파일을 하나하나 만들거나, 부트스트랩을 이용해서 프론트단을 구현했는데 Notion을 통해서 웹 템플릿을 html로 추출하면 그대로 나오더라고요. 이건 너무 꿀팁이라서 써봤습니다. 이렇게 노션으로 작성을하고, 추출한다음 템플릿 폴더에 넣어놓고 실행을 해보면 이렇게 노션처럼 똑같이 html, css가 구현이 됩니다. app.py from flask import Flask, render_template, request, redirect, url_for import database import sys app = Flask(__name__) @app.route(

Naver Blog

[개발일기] 멋진 토이 프로젝트 계획해보기

[개발일기] 멋진 토이 프로젝트 계획해보기 지금까지 스프링부트로 프로젝트를 하면서, 대부분 CRUD 로 개발했습니다. 프로젝트를 의미없이 공장처럼 찍어냈는데, 생각을 해보면, 참 의미 없다고 느껴졌습니다. 그러다가 API의 중요성을 알게 돼서 API 개발 공부와 더불어 인프라까지 조금조금 공부 했습니다. 어차피 현업가면 백엔드는 API 개발할테고, 프론트엔드는 백엔드가 보낸 걸 바탕으로 웹을 구상하기 때문에 지금까지 했던 프로젝트의 방식보다는 백엔드로 API를 개발해서 배포하는게 더 맞지 않나 생각이 들었습니다. 그래서 지금까지 했던 프로젝트 방식보다는, 조금 더 현업에 가까운 방법으로 프로젝트를 혼자서 진행을 해보려고 합니다. 최근에 파이썬 플라스크를 배우기 시작했고, 플라스크를 배우는 목적은 파이썬에게 유리한 데이터 분석 및 가공을 해서 플라스크를 통해 api 배포를 하기 위해서입니다. 그래서 지금 계획하는 프로젝트도 이런 식으로 해볼 생각인데, 지금 일단 생각한건 다음과 같습니

Naver Blog

[Flask] API 통신을 위한 GET, POST + JSON 통신을 해보자 (jsonify)

[Flask] API 통신을 위한 GET, POST + JSON 통신을 해보자 (jsonify) Flask 또한 어느 백엔드 웹 프레임워크처럼 GET, POST 요청을 받을 수 있습니다. 오늘은 Flask에서 jsonify를 이용해서 JSON 통신을 하는 방법에 대해 말씀 드리려고 합니다. from http import HTTPStatus from flask import Flask, jsonify, redirect, render_template, request, url_for app = Flask(__name__) data = { "age": 14, "money": 100000 } @app.route('/get', methods=['GET']) def get(): return jsonify({"data": data, "status": HTTPStatus.OK}) @app.route('/post', methods=['POST']) def post(): params = request.g

1 2 3 4 5 6 7 8 9