잠깐 써본 것 정리하기

 

 

1. build.gradle

어플리케이션 실행 후, src->main-> generated->entity Q객체들 생성 확인

Q객체가 있어야 selectFrom(comment) 에서 comment가 Comment엔티티라고 알려줄 수 있음. 자세힌 나중에 공부

 

 

QuerydslConfig생성 -> JPAQueryFactory @Bean 등록

 

 

RepositoryCustom, RepositoryImpl 생성

 

RespositoryCustom에 사용할 쿼리 선언

 

RepositoryImpl에 RepositoryCustom 구현

Q객체들 인스턴스이름으로 static import

쿼리 작성

 

Repository에 RepositoryCustom 상속

 

받아줄 DTO에 @QueryProjection(생성자 타입때문에)

'공부 > 잡다' 카테고리의 다른 글

Springboot 저장소  (0) 2023.04.16
IntelliJ 콘솔창 한글 깨질때  (0) 2023.04.15
웹 동작 간략개괄  (0) 2023.04.14
IntelliJ 디버거 활용 - Exception 조건설정  (0) 2023.04.10
Twitter recommendation system code revealed  (0) 2023.04.06

@Entity

-JPA에 해당 클래스가 DB의 테이블 역할이라는 것을 알려줌

-@Id  : Id

-@GeneratedValue(strategy = GenerationType.AUTO) : 자동생성 및 증가

-@Column : 컬럼임을 알려줌 (nullable, unique 옵션 boolean으로 줄 수 있음) 

 

 

<TimeStamp>

★SpringBootApplication 있는 class에 @EnableJpaAuditing 추가해주기

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class) 
public class Timestamped {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column
    private LocalDateTime modifiedAt;
}

==> Entity에 extend 받아서 사용하면, createdAt 컬럼과 modifiedAt 컬럼이 생김

 

============================================================================================

@RequestMapping("/resonse") ==>  response로 들어온 request를 해당 애노테이션이 붙은 곳으로 매핑해줌

@GetMapping("URL") ==> Get Method로 들어온 요청을 해당 메소드로 매핑해줌

@PostMapping   @PutMapping   @DeleteMapping  이하동문

★RequestMapping은 클래스와 메소드에 쓸 수 있고, 나머지는 메소드에만 쓸 수 있다.

==> RequestMapping("/response") 클래스 안에 있는 @GetMapping("/test")의 요청 URL은 /response/test 가 된다.

 

@Controller ==> 해당 클래스 / 메소드가 MVC 패턴의 Controller에 해당한다는 것을 알려줌

-기본적으로 @Controller는 view를 반환하게 되어있다. 따라서, return "hello"는 String 타입의 hello를 반환하는 것이 아니라, view로서 hello.html을 반환하게 된다.

bye.html은 없고 hello.html만 있을 때, @Controller인 함수가 view 형태의 bye.html을 찾을 수 없다고 알려줌.

하지만 모든 요청이 view를 요청하는 것은 아니다. 데이터를 JSON형태로 받아야 할 경우에는 

@ResponseBody  annotation을 붙여준다. Controller이긴 하지만, view가 아닌 데이터를 반환하는 메서드임을 알려준다.

JSON처럼 생긴 String으로 반환된 모습.

@RestController 는 @Controller와 @ResponseBody를 합쳐놓은 것.

==> RESTful한 설계(백엔드에서는 데이터만 전송)에서는 @RestController를 주로 사용

 

============================================================================================

@Autowired : 빈으로 등록된 클래스를 자동 주입(인스턴스화 하지 않아도 사용 가능)

@Service : 빈으로 등록함

 

 

@Transactional : Transactional이 붙은 연산들을 같이 관리하며, 서로간의 간섭이 없게 한다. Transaction이 끝날 때까지 외부에서 연산결과를 볼 수 없으며, 충돌 없이 Transaction들이 끝난 후에 데이터베이스에 반영된다. 그렇지 않으면 롤백된다. @Transaction시 데이터 업데이트 할 때, 엔티티만 업데이트 해주면 반영됨 - 추가공부하기()

 

 

@EnableJpaAuditing : @SpringBootApplication 있는곳에 붙여주면, Timestemp 사용가능↓↓↓

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class Timestamped {

@CreatedDate
private LocalDateTime createdAt;

@LastModifiedDate
private LocalDateTime modifiedAt;
}

 

 

@Configuration --> 아래에 @Bean  : Bean을 생성하고, 등록가능

 

@RequiredArgsConstructor : final변수에 bean 자동주입 (@Autowired 안써도됨)

 

@NoArgsConstructor : 기본생성자 만들어줌 (@Entity는 이게 있어야함)

 

JpaRepository.saveAndFlush(~~~~) : 영속성컨텍스트에 저장하지 않고, 바로 DB에 반영

 

@Scheduled(cron = " 0 0 1 * * *")  // 초 분 시 일 월 주

==> 지정된 시간마다 메서드 호출

 

 

JWT dependency :

build.gradle에

compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'

Application properties에 jwt.secret.key = asdfasdfasdfasfasdf

'공부 > 잡다' 카테고리의 다른 글

QueryDSL 사용법  (0) 2023.05.03
IntelliJ 콘솔창 한글 깨질때  (0) 2023.04.15
웹 동작 간략개괄  (0) 2023.04.14
IntelliJ 디버거 활용 - Exception 조건설정  (0) 2023.04.10
Twitter recommendation system code revealed  (0) 2023.04.06

https://www.lesstif.com/java/intellij-file-console-encoding-121012310.html

'공부 > 잡다' 카테고리의 다른 글

QueryDSL 사용법  (0) 2023.05.03
Springboot 저장소  (0) 2023.04.16
웹 동작 간략개괄  (0) 2023.04.14
IntelliJ 디버거 활용 - Exception 조건설정  (0) 2023.04.10
Twitter recommendation system code revealed  (0) 2023.04.06

IP주소 : 네트워크 공간 상의 주소같은거

 

브라우저 : 웹페이지, 이미지, 비디오 등을 송수신하는 소프트웨어

                 ==> 컨텐츠를 송/수신하고, 표현하는 것

 

DNS : Domain Name Server

         ==> 192.168.0.123과 같은 IP주소가 아닌, hello.com과 같은 이름으로 서버에 접근 가능하게 하는 중개서버

 

HTTP(HyperText Transfer Protocol) 프로토콜 : 클라이언트와 서버 간 데이터를 주고받는 양식을 정의한 "통신 규약"

         ==> 웹 통신의 표준어라고 생각하면 된다. 

 

API(Application Programming Interface) : 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의

 

REST(ful) API (Representational State Transfer) : API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍쳐

         ==> REST 아키텍쳐를 따르는 API를 REST api // 이를 구현하는 웹서비스를 RESTful 웹 서비스

 

DB : 데이터를 효율적으로 사용(CRUD) 하기 위해서 db를 활용한다.

 

https://aws.amazon.com/ko/what-is/restful-api/

 

RESTful API란 무엇인가요? - RESTful API 설명 - AWS

Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다. API Gateway를 사용하면 실시간 양방향 통신 애

aws.amazon.com

 

 

 

<HTTP>

항상 Request, Response라는 개념이 존재함. 브라우저가 요청 보냄 -> 서버는 해당 데이터를 응답 -> 브라우저가 그려줌

Request : 브라우저가 요청한 데이터 //&nbsp;Response : 서버가 응답한 데이터
서버에서 브라우저로 반환해준 웹페이지를 그려주기 위한 데이터

Method : 호출 / 요청 방식

-GET : 리소스를 얻을 때

-POST : 웹서버에 데이터를 게시할 때

 

Header : 추가데이터 / 메타데이터

-브라우저가 어떤 페이지를 원하는지

-요청받은 페이지 / 데이터를 찾았는지

-어떤 형식으로 데이터를 보낼지

 

Payload : 실제 데이터

-서버가 응답을 보낼 때는 항상 Payload를 보낼 수 있다.

-클라이언트(브라우저)도 역시 보낼 수 있다. 일반적으로, GET method를 제외하고는 모두 보낼 수 있다.

 

 

 

 

 

'공부 > 잡다' 카테고리의 다른 글

Springboot 저장소  (0) 2023.04.16
IntelliJ 콘솔창 한글 깨질때  (0) 2023.04.15
IntelliJ 디버거 활용 - Exception 조건설정  (0) 2023.04.10
Twitter recommendation system code revealed  (0) 2023.04.06
Open-AI ChatGPT plugin  (0) 2023.04.06

알고리즘 문제를 푸는데, for문 안에서 정규식을 처리하고 특정한 로직을 수행하는데 정규식의 어떤 케이스에서 에러가 나는지 몰라 함수 여러군데에 print문을 찍어 확인하였다.

코드도 지저분해지는 것 같고, 다 찾아서 주석처리해주는 것도 번거로워서 이참에 디버거를 써보기로 함.

중단점을 생성해주고 디버깅 실행하면, 중단점에서 코드를 멈춰준다.

이런식으로 멈춰있는 동안에 변수들의 상태를 확인할 수 있고, 다음 코드를 한 줄씩 실행하면서 이들의 변화를 볼수있다.

하지만, 나에게 발생한 문제는 for문이 한참 돌다가 발생한 것이기 때문에 손으로 한줄씩 넘겨주면서 Exception이 발생한 곳을 찾아줄 수 없었다.

이럴땐, Exception이 발생할 때 멈춰주도록 설정을 하면 된다.

중단점 우클릭하면 나오는 창

 

원하는 BreakPoint에만 체크

이렇게 NullPointerException이 발생했을 경우 멈춰주게되고, 왼쪽 탭에서 한 줄씩 이전으로 돌릴 수도 있다.

한줄 뒤로 돌아왔더니, 정규식을 처리한 이후 strip을 해주면 ""만 남는 케이스가 있어 이것을 넘겨받은 함수에서 해당하는 값을 찾지 못 해 에러가 발생한 것이었다.

 

 

'공부 > 잡다' 카테고리의 다른 글

IntelliJ 콘솔창 한글 깨질때  (0) 2023.04.15
웹 동작 간략개괄  (0) 2023.04.14
Twitter recommendation system code revealed  (0) 2023.04.06
Open-AI ChatGPT plugin  (0) 2023.04.06
ajax async // 웹관련 몇가지  (0) 2023.04.01

일론머스크의 공약대로 트위터 추천알고리즘의 코드가 공개되었다.

https://github.com/twitter/the-algorithm

 

 

ml부분 : https://github.com/twitter/the-algorithm-ml

 

GitHub - twitter/the-algorithm-ml: Source code for Twitter's Recommendation Algorithm

Source code for Twitter's Recommendation Algorithm - GitHub - twitter/the-algorithm-ml: Source code for Twitter's Recommendation Algorithm

github.com

 

시간될 때 코드 구경해보자

'공부 > 잡다' 카테고리의 다른 글

웹 동작 간략개괄  (0) 2023.04.14
IntelliJ 디버거 활용 - Exception 조건설정  (0) 2023.04.10
Open-AI ChatGPT plugin  (0) 2023.04.06
ajax async // 웹관련 몇가지  (0) 2023.04.01
Git Bash  (0) 2023.03.23

https://openai.com/blog/chatgpt-plugins

==========================================================================================

토이프로젝트 구현 중, 로그인 토큰을 관리하는 쿠키를 저장하고, 특정 조건에서 이 쿠키를 활용하여 로그인 여부를 확인하는 Auth() 함수를 만들었다. 활용되는 곳에서 return을 받아보니 계속 undefined가 받아와져서 return의 위치가 잘못됐다고만 생각하고있었는데, ajax의 async 옵션을 false로 설정해줘야 하는 경우였다.

관련내용 : https://recollectionis.tistory.com/167

 

[Ajax] async 비동기식 처리와 동기식 처리

Ajax 비동기식 처리와 동기식 처리 Ajax(Asynchronous JavaScript and XML)는 비동기적인 웹 애플리케이션의 제작을 위해서 표현 정보를 위한 HTML과 CSS, 동적인 화면 출력 및 표시 정보와의 상호작용을 위한

recollectionis.tistory.com

==========================================================================================

AWS elastic beanstalk의 경우 한달에 750시간의 무료 호스팅을 제공한다. 웹페이지 하나를 deploy하면 한달에 720시간이니 사실상 하나의 웹만 유지할 수 있다는 것. 내가 만들어본 페이지랑 부트캠프 입과시험 배포, 토이프로젝트 배포 등 다 내 AWS 계정으로 진행했어서 일단 다 내렸다. 시간날 때 내 페이지만 AWS에 올리고, 나머지 프로젝트는 https://www.netlify.com/    에서 무료 호스팅을 제공한다고 하니 여기에 올려보도록 하자

 

==========================================================================================

<토이프로젝트 진행 중 낙서>

HTML로 체크박스 체크/해제 기능은 <input> 태그의 옵션 중 type=checkbox를 통해서 구현 가능하다

<input> 태그의 옵션 중 type=password는 패스워드 입력 시 이를 가려줌

 

웹페이지를 이동시키는 JS코드는 window.location.href = 'url'      그밖에 window.location의 함수들 공부해보자

 

GET요청에도 파라미터를 쿼리형식으로 담을 수 있다. 요청을 보낼 url 뒤에 ?id=asdf 이런식으로 썼던걸로 기억

=> requests.args.get('파라미터이름')

 

Pymongo DB의 객체 중 _id필드는 고유id를 담고있는데, 이는 ObjectId 클래스여서 json형식으로 내려보내줄 수가 없다.

이걸 string으로 바꿔서 쓸일이 있을지 모르겠지만, 있다면 str()에 넣어줘서 바꿔주고, 다시 ObjectId로 만들어주고 싶으면 from bson import ObjectId      ==>  ObjectId(str)

 

로그인 토큰 저장 방식은 쿠키, 세션스토리지, 로컬스토리지

 

 

 

 

'공부 > 잡다' 카테고리의 다른 글

IntelliJ 디버거 활용 - Exception 조건설정  (0) 2023.04.10
Twitter recommendation system code revealed  (0) 2023.04.06
Open-AI ChatGPT plugin  (0) 2023.04.06
Git Bash  (0) 2023.03.23
Youtube Api 활용, 특정채널 영상 URL 가져오기  (0) 2023.03.23

+ Recent posts