내가 진행했던 테오의 스프린트 15기 (23.06.21 - 23.06.26)
우리는 멋진 길거리 사진을 소개하는 프로젝트를 만들었다.
게시글 내용은 이런식으로 보이고 태그기능을 사용하여 게시물을 검색할 수 있었다.
하지만 개발 기간은 스프린트 형식으로 진행되기 때문에 2일.. 짧은 기간동안 태그 기능을 간단히 구현하고 싶었다.
또한 백앤드는 한명..(본인)
그래서 비트마스킹으로 구현해보면 어떨까 라는 생각에 의견을 제시했고 결국 프론트분들을 설득시켜 성공하였다..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
export const tagList: Tag[] = [
{ id: 0, name: "편안한" } as Tag,
{ id: 1, name: "조용한" } as Tag,
{ id: 2, name: "친근한" } as Tag,
{ id: 3, name: "활기찬" } as Tag,
{ id: 4, name: "새로운" } as Tag,
{ id: 5, name: "오래된" } as Tag,
{ id: 6, name: "이국적인" } as Tag,
{ id: 7, name: "숨은명소" } as Tag,
{ id: 8, name: "커피명소" } as Tag,
{ id: 9, name: "야경명소" } as Tag,
{ id: 10, name: "자연경관" } as Tag,
{ id: 11, name: "반려동물과 함께" } as Tag,
];
|
cs |
태그는 프론트에서 이런식으로 구현되어있고
당연히 11개의 값이라 11개의 비트를 사용해서 구현하였다!. 모든 비트가 켜져있으면 2^11 = 2048
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class UserPost extends BaseTimeEntity{
@Id
@Column(name="post_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ColumnDefault("0")
private int viewCount;
@Size(min = 2, max = 250,message = "내용은 2~500자 사이로 입력해주세요.")
private String content;
private String detailImageUrl;
private String thumbnailImageUrl;
private Double lat;
private Double lng;
private String address_name;
private String tags;
private Long tagsNum;
private String profileImage;
private String music_id;
}
|
cs |
데이터는 이렇게 구성되어있고 tags는 비트형식으로 String 으로 변환하여 프론트에게 전달된다.
만약 조용한 활기찬이 체크되어있다면 01010000000 (ID 1번과 3을 1로 표기 ,앞에서부터 체크)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Operation(summary = "주변 게시물 찾기 API")
@GetMapping("/find-near-post/{lat}/{lng}/{tags}")
public Slice<PostsDto> getBoardListFromUserSearch(@PageableDefault(size = 6,sort = "createdDate",direction = Sort.Direction.DESC) @Parameter(hidden = true) Pageable pageable
, @PathVariable Double lat, @PathVariable Double lng, @PathVariable String tags) {
Long tags_num=convertTags(tags);
for (int i=0;i<userPostData.size();i++){
if ((tags_num&userPostData.get(i).getTagsNum()))==tags_num){
userPostList.add(userPostData.get(i));
}
}
return getUserPostsDto(pageable,userPostList);
}
|
cs |
사용자가 게시물을 찾을때 태그를 체크한거 & 연산을 통해 비트가 켜져있는지
확인하여 이런식으로 태그된 게시물을 불러 올수 있도록 하였다.
(태그 체크 이외에 코드는 지웠다)
잘 작동되는 모습...
'스프링부트' 카테고리의 다른 글
스프링 부트 Redis 분산 락 활용 동시성 제어 (1) | 2024.07.04 |
---|---|
이미지 업로드 비동기 처리 (0) | 2024.06.19 |
[스프링] 프로젝트 N+1 해결하기 (fetch join (0) | 2023.09.01 |
[스프링부트] 개인 프로젝트 버그 고치기 (0) | 2023.08.27 |
[Spring boot] 스프링 부트 에러페이지 커스터마이징하기 (0) | 2022.04.06 |