diff --git a/src/main/java/leets/weeth/domain/post/controller/PostController.java b/src/main/java/leets/weeth/domain/post/controller/PostController.java
index 26f6ff49..3c7fa2cf 100644
--- a/src/main/java/leets/weeth/domain/post/controller/PostController.java
+++ b/src/main/java/leets/weeth/domain/post/controller/PostController.java
@@ -1,7 +1,7 @@
 package leets.weeth.domain.post.controller;
 
 import leets.weeth.domain.post.dto.RequestPostDTO;
-import leets.weeth.domain.post.dto.ResponsePostDTO;
+import leets.weeth.domain.post.dto.PostDTO;
 import leets.weeth.domain.post.service.PostService;
 import leets.weeth.global.auth.annotation.CurrentUser;
 import leets.weeth.global.common.error.exception.custom.InvalidAccessException;
@@ -28,20 +28,28 @@ public CommonResponse<String> createOrUpdate(@RequestPart(value = "requestPostDT
     }
 
     @GetMapping("")
-    public CommonResponse<List<ResponsePostDTO>> findAllPosts(){
-        List<ResponsePostDTO> posts = postService.findAllPosts();
+    public CommonResponse<List<PostDTO>> findAllPosts(){
+        List<PostDTO> posts = postService.findAllPosts();
         return CommonResponse.createSuccess(posts);
     }
 
+    @GetMapping("/load")
+    public CommonResponse<List<PostDTO>> loadPosts(@RequestParam(required = false) Long lastPostId) throws InvalidAccessException {
+        List<PostDTO> postsLoaded = postService.loadPosts(lastPostId);
+        return CommonResponse.createSuccess(postsLoaded);
+    }
+
+
+
     @GetMapping("/myPosts")
-    public CommonResponse<List<ResponsePostDTO>> showMyPost(@CurrentUser Long userId){
-        List<ResponsePostDTO> myPost = postService.myPosts(userId);
+    public CommonResponse<List<PostDTO>> showMyPost(@CurrentUser Long userId){
+        List<PostDTO> myPost = postService.myPosts(userId);
         return CommonResponse.createSuccess(myPost);
     }
 
     @GetMapping("/{postId}")
-    public CommonResponse<ResponsePostDTO> showPost(@PathVariable Long postId){
-        ResponsePostDTO newPost = postService.show(postId);
+    public CommonResponse<PostDTO> showPost(@PathVariable Long postId){
+        PostDTO newPost = postService.show(postId);
         return CommonResponse.createSuccess(newPost);
     }
 
diff --git a/src/main/java/leets/weeth/domain/post/dto/ResponsePostDTO.java b/src/main/java/leets/weeth/domain/post/dto/PostDTO.java
similarity index 89%
rename from src/main/java/leets/weeth/domain/post/dto/ResponsePostDTO.java
rename to src/main/java/leets/weeth/domain/post/dto/PostDTO.java
index 765936b6..c27a5a9c 100644
--- a/src/main/java/leets/weeth/domain/post/dto/ResponsePostDTO.java
+++ b/src/main/java/leets/weeth/domain/post/dto/PostDTO.java
@@ -13,7 +13,7 @@
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
 @Getter
 @ToString
-public class ResponsePostDTO {
+public class PostDTO {
 
     private Long id;
     @NotBlank
@@ -30,8 +30,8 @@ public class ResponsePostDTO {
     private Long totalComments;
 
 
-    public static ResponsePostDTO createResponsePostDTO(Post post) {
-        return ResponsePostDTO.builder()
+    public static PostDTO createResponsePostDTO(Post post) {
+        return PostDTO.builder()
                 .id(post.getId())
                 .name(post.getUser().getName())
                 .title(post.getTitle())
diff --git a/src/main/java/leets/weeth/domain/post/repository/PostRepository.java b/src/main/java/leets/weeth/domain/post/repository/PostRepository.java
index 2d333e02..3bcc3483 100644
--- a/src/main/java/leets/weeth/domain/post/repository/PostRepository.java
+++ b/src/main/java/leets/weeth/domain/post/repository/PostRepository.java
@@ -1,8 +1,11 @@
 package leets.weeth.domain.post.repository;
 
 import leets.weeth.domain.post.entity.Post;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -10,4 +13,10 @@ public interface PostRepository extends JpaRepository<Post, Long> {
     ArrayList<Post> findAll();
     List<Post> findByUserId(Long userId, Sort sort);
 
+    @Query("SELECT MAX(p.id) FROM Post p")
+    Long findMaxPostId();
+
+    @Query("SELECT p FROM Post p WHERE p.id < :maxPostId ORDER BY p.id DESC")
+    List<Post> findRecentPosts(@Param("maxPostId") Long maxPostId, Pageable pageable);
+
 }
diff --git a/src/main/java/leets/weeth/domain/post/service/PostService.java b/src/main/java/leets/weeth/domain/post/service/PostService.java
index ccb7b969..234c3bf7 100644
--- a/src/main/java/leets/weeth/domain/post/service/PostService.java
+++ b/src/main/java/leets/weeth/domain/post/service/PostService.java
@@ -4,7 +4,7 @@
 import leets.weeth.domain.file.entity.File;
 import leets.weeth.domain.file.service.FileService;
 import leets.weeth.domain.post.dto.RequestPostDTO;
-import leets.weeth.domain.post.dto.ResponsePostDTO;
+import leets.weeth.domain.post.dto.PostDTO;
 import leets.weeth.domain.post.entity.Post;
 import leets.weeth.domain.post.repository.PostRepository;
 import leets.weeth.domain.user.entity.User;
@@ -14,6 +14,8 @@
 import leets.weeth.global.common.error.exception.custom.UserNotFoundException;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -29,30 +31,30 @@ public class PostService {
     private final FileService fileService;
 
     //모든 게시물 가져오기
-    public List<ResponsePostDTO> findAllPosts() {
+    public List<PostDTO> findAllPosts() {
         // 모든 게시물을 id에 대해 오름차순으로 조회
         List<Post> posts = postRepository.findAll(Sort.by(Sort.Direction.ASC, "id"));
         return posts.stream()
-                .map(ResponsePostDTO::createResponsePostDTO)
+                .map(PostDTO::createResponsePostDTO)
                 .collect(Collectors.toList());
     }
 
     // 특정 postId의 게시물만 조회
-    public ResponsePostDTO show(Long postId) {
+    public PostDTO show(Long postId) {
         Post target = postRepository.findById(postId)
                 .orElseThrow(PostNotFoundException::new);
 
-        return ResponsePostDTO.createResponsePostDTO(target);
+        return PostDTO.createResponsePostDTO(target);
     }
 
     // 특정 유저(본인)의 게시물만 조회
-    public List<ResponsePostDTO> myPosts(Long userId){
+    public List<PostDTO> myPosts(Long userId){
         // 특정 유저의 모든 게시물을 오름차순으로 조회
         List<Post> myPosts = postRepository.findByUserId(userId, Sort.by(Sort.Direction.ASC, "id"));
 
         // Post 리스트를 ResponsePostDTO 리스트로 변환
         return myPosts.stream()
-                .map(ResponsePostDTO::createResponsePostDTO) // Post -> ResponsePostDTO 변환
+                .map(PostDTO::createResponsePostDTO) // Post -> ResponsePostDTO 변환
                 .collect(Collectors.toList());
     }
 
@@ -100,4 +102,22 @@ public void delete(Long postId, Long userId) throws InvalidAccessException {
         }
         postRepository.delete(deleted);
     }
+
+    public List<PostDTO> loadPosts(Long lastPostId) throws InvalidAccessException {
+        Long maxPostId = postRepository.findMaxPostId();
+
+        if(lastPostId==null){   // 첫번째 요청인 경우
+            lastPostId = maxPostId + 1;
+        }
+        if(lastPostId <= 1 || lastPostId > maxPostId + 1){
+            throw new InvalidAccessException(); // postId가 1 이하이거나 최대값보다 클경우
+        }
+
+        Pageable pageable = PageRequest.of(0, 15); // 첫 페이지, 페이지당 15개 게시글
+        List<Post> posts = postRepository.findRecentPosts(lastPostId, pageable);
+        return posts.stream()
+                .map(PostDTO::createResponsePostDTO)
+                .toList();
+    }
+
 }